누구나 Reacts 단방향 데이터 바인딩과 Angular의 양방향 데이터 바인딩의 차이점을 설명 할 수 있습니까?


109

나는 이러한 개념에 대해 약간 모호합니다 .AngularJS와 ReactJS에서 동일한 ToDo 앱을 완전히 빌드하면 React ToDo가 단방향 데이터 바인딩과 AngularJS의 양방향 데이터 바인딩을 사용하는 이유는 무엇입니까?

나는 React가 다음과 같이 작동한다는 것을 이해합니다.

렌더링 (데이터) ---> UI.

Angular와 어떻게 다른가요?

답변:


165

모난

angular가 데이터 바인딩을 설정하면 두 개의 "감시자"가 존재합니다 (단순화).

//js
$scope.name = 'test';
$timeout(function()  { $scope.name = 'another' }, 1000);
$timeout(function()  { console.log($scope.name); }, 5000);

<!-- html --->
<input ng-model="name" />

입력은로 시작하여 1000ms test후에로 업데이트됩니다 another. $scope.name컨트롤러 코드에서 또는 입력을 변경하여에 대한 모든 변경 사항 은 4000ms 후에 콘솔 로그에 반영됩니다. 받는 사람 변경 <input />에 반영되어 $scope.name있기 때문에, 자동 특성 ng-model세트까지 입력 및 통지 시계 $scope변경합니다. 코드 변경 및 HTML 변경은 양방향 바인딩 입니다. ( 이 바이올린을 확인하십시오 )

반응

React에는 HTML이 구성 요소를 변경할 수있는 메커니즘이 없습니다. HTML은 구성 요소가 응답하는 이벤트 만 발생시킬 수 있습니다. 일반적인 예는 onChange.

//js
render() { 
    return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
    this.setState({value: e.target.value});
}

의 값은 전적으로 함수에 의해 <input />제어 됩니다. 이 값을 갱신 할 수있는 유일한 방법은 부착에 의해 수행되는 성분 자체 내지 받는 이벤트를 한 세트 (가) 성분에있어서 반응로 . 는 그것을 변경할 수 없도록 구성 요소의 상태에 직접 액세스하고 있지 않습니다. 이것은 단방향 바인딩 입니다. (이 코드 펜 확인 )renderonChange<input />this.state.valuesetState<input />


9
감사합니다. 이것은 매우 유익했습니다. 그래서 Angular는 React의 Render (data) ---> UI와 달리 UI <----> Data처럼 작동한다고 생각합니다.
WinchenzoMagnifico

예, 그것은을 넣어 아주 간결한 방법 이잖아
Kyeotic

5
명확하게 말하면 데이터 바인딩의 특징은 업데이트가 자동으로 수행된다는 것 입니다. (가) 예 반응에서, UI → 데이터는 여전히 그것은 기본적으로 발생하지 않습니다 단지이다, 무슨 일이 일어나고 - 당신이 수동으로 설정해야 onChange리스너 및 실행 handleChange. 그러나 거기에서 React의 단방향 데이터 바인딩으로 인해 데이터 → UI 업데이트 자동으로 발생합니다.
Adam Zerner

참고로 바이올린은 AngularJS 1.1.1에 대한 참조가 필요했습니다. AngularJS 1.0.1에 대한 참조는 더 이상 유효하지 않았고 404를 얻었습니다. 이상하게도 새로운 바이올린 (1.1.1 참조)에서 동일한 코드를 사용하면 실패합니다. , 그게 무엇인지 모르겠습니다.
Josh Sutterfield

194

나는 작은 그림을 만들었습니다. 충분히 명확하길 바랍니다. 그렇지 않다면 알려주세요!

양방향 데이터 바인딩 VS 단방향 데이터 바인딩


21
'Titre de l' annonce'는 무엇입니까?
ghd

6
프랑스어로 된 '광고 제목'
timelf123

14
이 개념을 이해하는 한 @DamienRoche의 차이점은 다음과 같습니다. 양방향 데이터 바인딩 : 데이터 변경보기 변경 및 그 반대로 —보기 내부 입력 업데이트 데이터 업데이트. 진행중인 데이터 흐름 : 데이터를 업데이트하는 뷰를 업데이트하지만 뷰에서 입력을 업데이트하면 프로그래머가 데이터를 업데이트 할 입력에 리스너를 연결하여 명시 적으로 수행하지 않는 한 데이터를 업데이트하지 않습니다. 그것이 당신을 위해 조금 더 명확 해지기를 바랍니다.
Cake_Seller

2
메시지를 보내 주신 @Patrick에게 감사드립니다. 나는 내가 한 일이 다른 사람들에게 유용하다는 것을 느끼게되어 항상 매우 기쁩니다
Gabriel

링크가 깨졌습니다 @Gabriel 게시물에 이미지를 공유 할 수 있습니까?
user3141326

12

양방향 데이터 바인딩은 속성 값을 가져 와서 뷰에 표시하는 기능을 제공하는 동시에 모델의 값을 자동으로 업데이트하는 입력을 갖습니다. 예를 들어 뷰에 "task"속성을 표시하고 텍스트 상자 값을 동일한 속성에 바인딩 할 수 있습니다. 따라서 사용자가 텍스트 상자의 값을 업데이트하면 뷰가 자동으로 업데이트되고이 매개 변수의 값도 컨트롤러에서 업데이트됩니다. 반대로 단방향 바인딩은 모델의 값을 뷰에 바인딩 할 뿐이며 뷰의 값이 사용자에 의해 변경되었는지 확인하기위한 추가 감시자가 없습니다.

React.js와 관련하여 실제로 양방향 데이터 바인딩을 위해 설계되지는 않았지만 몇 가지 추가 논리를 추가하여 수동으로 양방향 바인딩을 구현할 수 있습니다 (예 :이 링크 참조) . Angular.JS에서 양방향 바인딩은 퍼스트 클래스 시민이므로이 추가 로직을 추가 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.