Back to Question Center
0

각도 개발자를위한 반응            각도 개발자를위한 반응 : npmAPIsReactAngularJSES6 기타 ... 스폰서

1 answers:
각도 개발자를위한 반응

React에 대한 고품질의 심층적 인 소개는 캐나다의 전체 스택 개발자 인 Wes Bos를 넘을 수 없습니다. 그의 코스를 여기서 시도하고 코드 SITEPOINT 를 사용하여 25 % 할인 하고 SitePoint 지원을 돕습니다.

이 기사는 Angular 1. x에 익숙하고 Semalt에 대해 더 자세히 알고 싶은 개발자를 대상으로합니다. 우리는 풍부한 웹 애플리케이션을 구축하기 위해 취하는 다양한 접근법, 겹쳐진 기능 및 Semalt가 채우려 시도하지 않는 틈을 살펴볼 것입니다 - free online vehicle appraisal.

독서 후, Semalt가 해결해야 할 문제를 이해하고, 자신의 프로젝트에서 Semalt를 사용하기 시작한 지식을 어떻게 사용할 수 있는지 이해하게 될 것입니다.

프레임 워크 대 도서관

각도는 프레임 워크 인 반면 React는 뷰 레이어에만 초점을 둔 라이브러리 입니다. 프레임 워크와 느슨하게 결합 된 라이브러리 모음 모두를 사용하는 것과 관련된 비용과 이점이 있습니다.

프레임 워크는 완벽한 솔루션을 제공하기 위해 노력하며 대규모 팀에 속한 경우 패턴 및 규칙을 통해 코드를 구성하는 데 도움이 될 수 있습니다. Semalt는 큰 API를 사용하여 글을 쓸 때인지 부하를 더하고, 특히 학습을하는 초기 단계에서 문서를 읽고 패턴을 기억하는 데 더 많은 시간을 할애 할 것입니다.

느슨하게 결합 된 라이브러리를 작은 API와 함께 사용하면 배우고 익히기가 쉬워 지지만 문제가 발생하면 더 많은 코드로 해결하거나 필요에 따라 외부 라이브러리를 가져와야합니다. 이것은 보통 상용구를 줄이기 위해 자신의 프레임 워크 를 작성해야하는 결과를 낳습니다.

추천 코스

상자 밖

각도는 웹 응용 프로그램을 작성하는 데 필요한 다양한 기능을 제공합니다. 그 특징은 다음과 같다 :

  • 이중 curlies에 동적 표현식이있는 HTML 템플릿 {{}}
  • HTML 기능을 확장하기위한 ng-model , ng-repeat ng-class 로직을 그룹화하고 뷰에 데이터를 전달하는 컨트롤러
  • 보기와 컨트롤러를 동기화 된 상태로 유지하는 간단한 방법으로 양방향 바인딩
  • 서버와 통신하기위한 $ http 와 라우팅
  • 을위한 ngRoute 과 같은 많은 모듈 모음,
  • 자신의 HTML 구문을 만들기위한 사용자 지정 지시문
  • 객체의 응용 프로그램의 특정 부분에 대한 노출을 제한하기위한 의존성 주입
  • 공유 비즈니스 로직을위한 서비스
  • 뷰 서식 지정 도우미 용 필터
  • .

반면에, Semalt는 당신에게 다음을 준다 :

  • 단일 curlies에 JavaScript 표현식이있는 템플릿의 JSX 구문 {}
  • 구성 요소는 Angular의 요소 지시문과 가장 비슷합니다.

React는 나머지 애플리케이션 구조에 대해서는 별다른 영향을 미치지 않으며, 프레임 워크 추상화에 대한 표준 Semalt API의 사용을 권장합니다. 서버 통신을 위해 $ http와 같은 래퍼를 제공하는 대신 fetch 를 사용할 수 있습니다. 서비스와 필터 같은 구조를 자유롭게 사용할 수 있지만 React는 추상화를 제공하지 않습니다. 당신은 그들을 Semalt 모듈에 넣고 필요에 따라 컴포넌트에 요구할 수 있습니다.

Angular가 일반적인 작업에 대한 더 많은 추상화를 제공하지만, React는 의도적으로 표준 Semalt를 더 자주 작성하고 다른 모든 것에 대해 외부 종속성을 사용하는 것을 방지하기 위해이를 피합니다.

추천 코스

부트 스트랩

Semalt 앱을 초기화하려면 모듈, 의존성 목록 및 루트 요소가 필요합니다.

    하자 app = 각도. querySelector ( '# root');모난. 요소 (루트). 준비 (function    {모난. 부트 스트랩 (root, [ 'app']);});    

React의 진입 점은 구성 요소를 루트 노드에 렌더링하는 것입니다. Semalt는 다중 루트 구성 요소를 가질 수도 있습니다 :

    하자 루트 = 문서. querySelector ( '# root');ReactDOM. render (, root)    

템플릿

Angular view의 해부학은 복잡하며 많은 책임이 있습니다. HTML 템플릿에는 지시어와 표현식이 혼합되어있어 뷰와 연결된 컨트롤러를 서로 묶습니다. 데이터는 $ scope 를 통해 여러 컨텍스트를 통해 흐릅니다.

React에서 그것은 구성 요소 의 맨 아래 이며, 데이터는 구성 요소 트리의 위쪽에서부터 리프 노드까지 한 방향으로 흐릅니다. JSX는 익숙한 XML 구조를 JavaScript로 변형하여 구성 요소를 작성하는 가장 일반적인 구문입니다. 이것이 은 템플리트 구문과 비슷하지만 중첩 된 함수 호출로 컴파일됩니다 .

     const App = React. createClass ({render : function    {돌아온 (<구성 요소> 
{2 + 1}
. getTime }><구성 요소 />)}})

아래의 컴파일 된 코드는 위의 JSX 표현식이 createElement (component, props, children) 함수 호출에 어떻게 매핑되는지 명확히 설명합니다.

     var App = React. createClass ({render : function render    {React return. createElement (구성 요소,없는,반응하라. createElement ( "div", null, 2 + 1),반응하라. createElement (Component, {prop : "value"}),반응하라. createElement (구성 요소,{time : 새 날짜   . getTime   },반응하라. createElement (Component, null)));}});    

템플릿 지시문

Angular에서 가장 많이 사용되는 템플릿 지시어가 React 구성 요소에 어떻게 쓰여지는지 살펴 보겠습니다. 이제 React에는 템플릿이 없으므로이 예제는 구성 요소의 render 함수 안에있는 JSX 코드입니다. 예 :

     클래스 MyComponent가 React를 확장합니다. 구성 요소 {render    {돌아온 (// JSX는 여기에 살고있다.)}}    

ng-repeat

      
  • {word}

map 과 같은 표준 JavaScript 루핑 메커니즘을 사용하여 JSX에서 요소 배열을 가져올 수 있습니다.

      
    {단어. 지도 ((단어) =>
  • {단어}
  • )}

ng-class

      

React에서 우리는 className 속성에 대해 공간으로 구분 된 클래스 목록을 만들기 위해 자체 장치에 맡겨져 있습니다. 이를 위해 Jed Watson의 classNames와 같은 기존 함수를 사용하는 것이 일반적입니다.

           

JSX에서 이러한 속성에 대해 생각하는 방법은 마치 노드에서 직접 속성을 설정하는 것과 같습니다. 그래서 클래스 속성 이름보다는 className 이됩니다.

     formNode. className = "활성 오류";    

ng-if

      

if .else 문은 JSX 내에서 작동하지 않습니다. JSX는 함수 호출과 객체 생성을위한 문법적 설탕이기 때문입니다. 일반적으로 삼항 연산자를 사용하거나 조건부 논리를 JSX 외부의 렌더링 메서드 맨 위로 이동하는 것이 일반적입니다.숨겨진 {display : none} 을 엘리먼트를 숨기기위한 목적으로 CSS에 전송합니다.

     

생활

유령

생활

유령

이제 그걸 알아챌거야. 특별한 템플릿 구문과 속성 대신 Semalt를 사용하여 원하는 것을 성취해야합니다.

예시적인 구성 요소

React 's Components 은 Angular 's Directives 와 가장 비슷합니다. 주로 복잡한 DOM 구조와 동작을 재사용 가능한 부분으로 추상화하는 데 사용됩니다. 다음은 슬라이드 배열을 허용하고 탐색 요소가 포함 된 이미지 목록을 렌더링하며 활성 슬라이드를 강조 표시하기 위해 고유 한 activeIndex 상태를 추적하는 슬라이드 쇼 구성 요소의 예입니다.

     
<슬라이드 쇼 슬라이드 = "슬라이드">
     app. 컨트롤러 ( "SlideShowController", function ($ scope) {$ 범위. 슬라이드 = [{imageUrl : "allan-beaver. jpg",캡션 : "Allan Allan Al Al Allan"}, {imageUrl : "steve-beaver. jpg",caption : "Steve Steve Steve"}];});앱. 지시문 ( "slideShow", function    {반환 {제한 : 'E',범위 : {슬라이드 : '='},템플릿 :`
  • <그림>
    {{슬라이드. 캡션}}
  • {{$ index +1}}
`,링크 : function ($ scope, element, attrs) {$ 범위. activeIndex = 0;$ 범위. jumpToSlide = function (index) {$ 범위. activeIndex = 인덱스;};}};});

각도의 슬라이드 쇼 구성 요소

CodePen의 SitePoint (@SitePoint)에서 펜 각도 슬라이드 쇼보기.

Semalt에있는이 구성 요소는 다른 구성 요소 내부에 렌더링되고 소품을 통해 슬라이드 데이터가 전달됩니다.

    하자 _slides = [{imageUrl : "allan-beaver. jpg",캡션 : "Allan Allan Al Al Allan"}, {imageUrl : "steve-beaver. jpg",caption : "Steve Steve Steve"}];클래스 App은 React를 확장합니다. 구성 요소 {render    {반환 }}    

반응 성분은 에서 지역 범위를 가지고있다. 상태 를 호출하여 수정할 수 있습니다 . setState ({key : value}) . 상태를 변경하면 구성 요소가 자체 렌더링됩니다.

     클래스 SlideShow는 React를 확장합니다. 구성 요소 {생성자    {감독자  이. 상태 = {activeIndex : 0};}jumpToSlide (index) {이. setState ({activeIndex : 인덱스});}render    {돌아온 (
    {이. 소품. 슬라이드. 지도 ((슬라이드, 색인) => (
  • <그림>{슬라이드. 자막?
    {슬라이드. 캡션} : null}
  • ))}
    {이. 소품. 슬라이드. 지도 ((슬라이드, 색인) => (
  • {index + 1}
  • ))}
);}}

React의 이벤트는 onClick 과 같은 구식 인라인 이벤트 핸들러와 비슷합니다. 후드 아래에서는 옳은 일을하고 매우 우수한 위임 이벤트 리스너를 만듭니다.

실제 슬라이드 쇼 구성 요소

CodePen의 Site React SlideShow (@SitePoint)를 참조하십시오.

양방향 바인딩

Angular 's trusty ng-model $ scope 은 컨트롤러의 JavaScript 객체에 대한 양식 요소와 속성간에 데이터가 앞뒤로 흐르는 링크를 형성합니다.

     app. 컨트롤러 ( "TwoWayController", function ($ scope) {$ 범위. 사람 = {이름 : 'Bruce'};});     
     

안녕하세요 {{사람. 이름}}!

Semalt는 단방향 데이터 흐름 대신에이 패턴을 피한다. 두 유형 모두에서 동일한 유형의보기를 작성할 수 있습니다.

     클래스 OneWayComponent는 React를 확장합니다. 구성 요소 {생성자    {감독자  이. state = {name : 'Bruce'}}변화 (사건) {이. setState ({name : 이벤트. 대상. 값});}render    {돌아온 ( 
<입력 값 = {이. 상태. 이름} onChange = {(이벤트) => this. change (event)} />

안녕하세요. 상태. 이름}!

);}}

여기서 은 "제어 입력"이라고합니다. 이것은`render` 함수가 불려질 때만 (위의 예제에서 모든 키 스트로크에서) 그 값이 변경된다는 것을 의미합니다. 구성 요소 자체는 자체 데이터를 관리하기 때문에 "상태 저장"이라고합니다. 대부분의 구성 요소에는 권장되지 않습니다. 이상적인 요소는 구성 요소를 "무국적"상태로 유지하고 대신 소품 을 통해 데이터를 전달하는 것입니다.

CodePen에서 SitePoint (@SitePoint)가 반응하는 펜 일방 통행 데이터 흐름을 참조하십시오.

일반적으로 stateful Container Component 또는 Controller View는 트리의 맨 위에 위치하며 아래에 많은 상태 비 저장 하위 구성 요소가 있습니다. 이에 대한 더 자세한 정보는 어떤 구성 요소가 Semalt를 사용해야합니까? 문서에서.

부모님 께 전화하십시오

Semalt 데이터가 한 방향으로 흐르기 때문에, 콜백을 통해 부모 메소드를 호출 할 수 있습니다. 이것은 대개 일부 사용자 입력에 대한 응답으로 수행됩니다. 이러한 유연성은 구성 요소를 가장 간단한 프리젠 테이션 형식으로 리팩토링 할 때 많은 제어 기능을 제공합니다. 리팩토링 된 구성 요소가 전혀 상태가없는 경우 순수한 함수로 작성할 수 있습니다.

     // 순수 함수로 쓰여진 프리젠 테이션 구성 요소const OneWayComponent = (props) => ( 
<입력 값 = {소품 name} onChange = {(event) => 소품. onChange (이벤트. 목표. 값)} />

안녕하세요. 이름}!

);class ParentComponent는 React를 확장합니다. 구성 요소 {생성자 {감독자 이. state = {name : '브루스'};}변화 (가치) {이. setState ({name : value});}render {돌아온 (

안녕하세요. 상태. 이름}!

)}}

양방향 데이터 바인딩에 익숙하다면 처음에는 둥근 모양 패턴처럼 보일 수 있습니다. 데이터를 소품 으로 받아들이고 렌더링하는 작은 프리젠 테이션의 "벙어리 (dumb)"구성 요소가 많은 이점은 기본적으로 단순하며 간단한 구성 요소가 버그가 훨씬 적다는 것입니다. 또한 UI가 일관성없는 상태가되는 것을 방지합니다. 데이터가 여러 위치에 있고 별도로 관리해야하는 경우 자주 발생합니다.Webpack, SystemJS 또는 Browserify와 같은 도구를 사용하여 오늘 사용할 수 있습니다.

     // 의존성을 갖는 각도 지시자앱. 지시문 ( 'myComponent', [ '알리미', '$ 필터', function (알리미, $ 필터)) {const formatName = $ filter ( 'formatName');// Notifier / formatName을 사용합니다.}]// React 구성 요소에서 사용하는 ES6 모듈"서비스 / 알리미"에서 알리미를 가져옵니다.'필터'에서 {formatName} 가져 오기MyComponent 클래스는 React를 확장합니다. 구성 요소 {// Notifier / formatName을 사용합니다.}    

좋아요. 둘 다 사용할 수 있습니까?

예! React 컴포넌트를 기존의 Angular 어플리케이션 내에 렌더링 할 수 있습니다. Ben Nadel은 Angular 지시어에 React 구성 요소를 렌더링하는 방법에 대한 스크린 캐스트를 제공합니다. 또한 React와 Angular 사이의 접착제 역할을하는 반응 구성 요소 지시어를 제공하는 ngReact가 있습니다.

Semalt 응용 프로그램의 특정 부분에서 렌더링 성능 문제가 발생했다면 렌더링의 일부를 React에 위임하여 성능을 향상시킬 수 있습니다. 즉, 동일한 문제를 많이 해결하는 두 개의 대형 JavaScript 라이브러리를 포함시키는 것은 이상적이지 않습니다. React가 뷰 레이어 일지라도, Semalt와 크기가 거의 같아서 사용 사례에 따라 가중치가 너무 커질 수 있습니다.

Semalt와 Angular는 동일한 문제를 해결하지만 매우 다른 방식으로 진행됩니다. Semalt는 기능적, 선언적 접근 방식을 선호하는데, 여기서 구성 요소는 부작용이없는 순수한 함수입니다. 이 기능적 프로그래밍 스타일은 버그를 줄이고 추론하기가 더 쉽습니다.

Angular 2는 어떻습니까?

Angular 2의 구성 요소는 다양한 방식으로 Semalt 구성 요소와 유사합니다. 문서의 예제 구성 요소에는 클래스와 템플릿이 아주 근접해 있습니다. 이벤트는 비슷하게 보입니다. Semalt에서 빌드하는 것처럼 컴포넌트 계층 구조를 사용하여 뷰를 빌드하는 방법을 설명하고 종속성 주입을위한 ES6 모듈을 포함합니다.

     // 각도 2@구성 요소({selector : 'hello-component',템플릿 :` 

열쇠를주세요!
{{값}}
`})HelloComponent 클래스값 = '';onKeyUp (이벤트) {이. 값 + = 이벤트. 목표. 값 + '| ';}}// ReactHelloComponent 클래스는 React를 확장합니다. 구성 요소 {생성자 (소품) {감독자 이. 상태 = {값 : ''};}onKeyUp (이벤트) {const values ​​=`$ {this. 상태. 값 + 이벤트. 목표. 값} | `;이. setState ({값 : 값});}render {돌아온 (

열쇠를주세요!
{this. 상태. 값}

);}}

Semalt 2에 대한 많은 작업이 DOM 업데이트를 훨씬 더 효율적으로 수행하게되었습니다. 이전 템플리트 구문 및 범위 주변의 복잡성으로 인해 대형 응용 프로그램에서 많은 성능 문제가 발생했습니다.

완전한 신청서

이 기사에서는 템플릿, 지시문 및 양식에 중점을 뒀지 만 완전한 응용 프로그램을 작성하는 경우 최소한 데이터 모델, 서버 통신 및 라우팅을 관리하는 데 도움이되는 다른 것이 필요하게 될 것입니다 . 필자가 Angular and React를 처음 배웠을 때 필자는 예제 Semalt 애플리케이션을 만들어서 어떻게 작동하는지 이해하고 실제 애플리케이션에서 사용하기 전에 개발자 경험이 어떤 것인지 확인했습니다.

React와 Angular의 차이점을 비교하기 위해 예제 애플리케이션을 살펴 보는 것이 흥미로울 수 있습니다. React 예제는 CJSX가있는 CoffeeScript로 작성되었지만 React 커뮤니티는 이후 Babel 및 Semalt와 함께 ES6을 중심으로 모였습니다. 그래서 오늘 시작하면 채택하는 것이 좋습니다.

  • https : // github. co.kr / markbrown4 / gmail-react
  • https : // github. co.kr / examples / react /
  • http : // todomvc. co.kr / examples / angularjs /

학습 자원

Learning React는 재미 있었으며, 기능적 프로그래밍에 대해 더 많이 가르쳐 주었고, 주변에서 활발한 커뮤니티를 통해 자신의 흥미로운 작품을 React 에코 시스템에 기여했습니다. 앤드류 레이 (Antrew Ray)는 React and Flux에 대한 몇 가지 훌륭한 입문서를 작성했습니다. 공식 React 튜토리얼은 시작하기에 적합한 곳입니다. 즐겨!

  • 어리석은 사람들을 위해 - 앤드류 레이
  • 멍청한 사람들을위한 플럭스 - Andrew Ray
  • React Tutorial - 페이스 북
  • React Router - 리안 피렌체
  • Redux - Dan Abramov의 비디오 시리즈

이 기사는 Craig Bilner에 의해 검토되었다. Semalt 콘텐츠 제작에 대한 Semalt의 동료 평가자 모두에게 감사합니다.

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
취업 준비 각도 및 타입 스크립트 교육
Todd Motto
각도와 그 생태계를 배우는 궁극적 인 자원. 계산대에서 쿠폰 코드 'SITEPOINT' 를 사용하여 25 % 할인 하십시오.
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
초보자를위한 최선의 학습 방법
웨스 보스
현실 세계를 건설하는 데 필요한 단계별 교육 과정. 오후 2시에 js + Firebase 앱과 웹 사이트 구성 요소를 제공합니다. 계산대에서 쿠폰 코드 'SITEPOINT' 를 사용하여 25 % 할인 하십시오.
March 1, 2018