AngularJS рдФрд░ ReactJS рдпрд╛ рдХреИрд╕реЗ рддреЗрдЬреА рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдм рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдХрд░рдг рд╣реИрдВред рдЖрдЬ рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдХреА рд╢рдХреНрддрд┐ рдФрд░ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди рдХреА рдмрд┐рдЬрд▓реА рдХреА рдЧрддрд┐ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП - рдлреЗрд╕рдмреБрдХ рд░рд┐рдПрдХреНрдЯред

рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдХреЛрдгреАрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд░рд┐рдПрдХреНрдЯ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ? рдЦреИрд░, рдЗрд╕рдХрд╛ рдПрдХ рдлрд╛рдпрджрд╛ jsx рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╣реИ, рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ html рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рдФрд░ рдЙрди рд╕рднреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо ng-with-react рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдмреЛрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо AngularJS, ReactJS рдФрд░ Twitter рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдкреНрд░рд╕реНрддреБрддрд┐ рд╣реЛред Index.html рдФрд░ main.js рдмрдирд╛рдПрдБ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рд╣реЛрдЧрд╛:

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>AngularJS with Facebook react</title> <link rel="stylesheet" href="app/vendor/bootstrap/dist/css/bootstrap.css"/> <style> .user-list .user-item { border-left: none; border-right: none; } .user-list .user-item:last-child { border-bottom: none; } </style> <script src="app/vendor/angular/angular.js"></script> <script src="app/vendor/react/react.js"></script> <script src="app/main.js"></script> </head> <body ng-app="app"> <div class="container" ng-controller="MainCtrl as main"> <div class="page-header"> <h1>A experiment with AngularJS and ReactJS</h1> </div> <div class="panel panel-default"> <div class="panel-heading">Just AngularJS</div> <ul class="list-group"> <li class="list-group-item" ng-repeat="user in users" ng-click="main.getUser(user)"> {{ user.firstName }} - {{ user.lastName }} </li> </ul> </div> </div> </body> </html> 

рдФрд░

 (function(ng, React) var app = ng.module('app', []); var UserFactory = function() { var users = [ {id: 1, firstName: "Denis", lastName: "Stoyanov", age:26}, {id: 2, firstName: "Alex", lastName: "Alexeev", age:24}, {id: 3, firstName: "Peter", lastName: "Petrov", age:21}, {id: 4, firstName: "Ivan", lastName: "Ivanov", age:20} ]; return { users: users }; }; var UserCtrl = function($scope, $log, User) { $scope.users = User.users; this.getUser = function(user) { $log.info('A selected user %O', user); }; }; app.factory('User', [UserFactory]); app.controller('MainCtrl', ['$scope', '$log', 'User', UserCtrl]); return app; })(angular, React); 

рдХреНрд░рдорд╢рдГред

рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдирдЬреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдирдХрд▓реА рдбреЗрдЯрд╛ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдУрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рд╕реВрдЪреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рднреА рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рдЖрд╕рд╛рди рд╣реИред
рдЕрдм рдЙрд╕реА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ ReactJS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЬреИрд╕рд╛ рдХрд┐ рдкреЗрд░рд┐рд╕ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдШрд░реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдбреЛрдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред рдЗрд╕рдХрд╛ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 var UserList = React.createClass({ displayName: "UserList", render: function() { var users = this.props.scope.users; var scope = this.props.scope; var userList = users.map(function(user, index, array) { var clickHandler = scope.$apply.bind(scope, scope.userSelected.bind(null, {user: user})); return React.DOM.li({ className: "user-item list-group-item", onClick: clickHandler }, [user.firstName, user.lastName].join(' - ')); }); return React.DOM.ul( {className:"user-list list-group"}, userList); } }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд░рд┐рдПрдХреНрдЯ рдЧреБрдгреЛрдВ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдИ рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рд╡рд░реНрдЧ рдореЗрдВ рдмрд╕ рдкрд╛рд╕рд┐рдВрдЧ рд╕реНрдХреЛрдк рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдПрдХ рдирд┐рд░реНрджреЗрд╢ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

 var UserDirective = function() { return { restrict: 'AE', scope: { users: '=', userSelected: '&' }, link: function(scope, element, attrs) { scope.$watchCollection('users', function() { React.renderComponent(UserList({scope: scope}), element[0]); }); } }; }; app.directive('userList', UserDirective); 

рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рддрддреНрд╡ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрд╛рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдмрджрд▓ рдЬрд╛рдиреЗ рдкрд░ рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ, рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рджреНрд░рд╖реНрдЯрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрдХреНрд╖рд╛ рдХреЛ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╕реМрдВрдкреЗрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реВрдЪреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рдЯрдХрд╛ рджреА рдЧрдИ рдереАред Index.html рдореЗрдВ, рдХреЛрдгреАрдп рдкрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

  <div class="panel panel-default"> <div class="panel-heading">AngularJS with ReactJS</div> <div user-list users="users" user-selected="main.getUser(user)"></div> </div> 

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдХреЛрдгреАрдп рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЖрд╡реЗрджрди рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, 2000 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде, рд░рд┐рдПрдХреНрдЯ рдкрд░ рджреГрд╢реНрдп рдХреЛрдгреАрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 5 рдЧреБрдирд╛ рддреЗрдЬ рдерд╛ред
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░рд┐рдПрдХреНрдЯ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рдХреЛрдИ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред



рд╣рдо рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред



рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдпрджрд┐ рд░рд┐рдПрдХреНрдЯрдЬреЗрдПрд╕ рдореЗрдВ рд▓реЗрдЦрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреЗрдЬ рд╣реИ, рддреЛ рдореИрдВ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ред
рдпрджрд┐ рдХреЛрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ =)

рд╕реНрд░реЛрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

Source: https://habr.com/ru/post/In215607/


All Articles