AngularJSとReactJSで同じToDoアプリを完全に構築する場合、これらの概念については少し曖昧です。React ToDoが一方向データバインディングとAngularJSの双方向データバインディングを使用する理由は何ですか?
Reactのような作品のようなものを理解しています
Render(data)---> UI。
これはAngularとどう違うのですか?
angularがデータバインディングを設定するとき、2つの「ウォッチャー」が存在します(これは簡略化です)
//js
$scope.name = 'test';
$timeout(function() { $scope.name = 'another' }, 1000);
$timeout(function() { console.log($scope.name); }, 5000);
<!-- html --->
<input ng-model="name" />
入力はtest
で始まり、その後1000msでanother
に更新されます。コントローラコードから、または入力を変更して$scope.name
を変更すると、4000ミリ秒後にコンソールログに反映されます。 <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 />
の値は、render
関数によって完全に制御されます。この値を更新する唯一の方法は、コンポーネント自体からです。これは、onChange
イベントを<input />
にアタッチすることによって実行されます。this.state.value
は、ReactコンポーネントメソッドsetState
で<input />
はコンポーネントの状態に直接アクセスできないため、変更できません。これは、片方向バインディングです。 (これをチェックしてください codepen )
双方向のデータバインディングは、プロパティの値を取得してビューに表示する機能を提供すると同時に、モデルの値を自動的に更新する入力も備えています。たとえば、ビューにプロパティ「task」を表示し、テキストボックスの値をその同じプロパティにバインドできます。したがって、ユーザーがテキストボックスの値を更新すると、ビューが自動的に更新され、このパラメーターの値もコントローラーで更新されます。対照的に、一方向バインディングはモデルの値をビューにバインドするだけで、ビューの値がユーザーによって変更されたかどうかを判断するための追加のウォッチャーはありません。
React.jsについては、実際には双方向のデータバインディング用に設計されていませんが、いくつかのロジックを追加することで、手動で双方向のバインディングを実装できます。たとえば、この link を参照してください。 Angular.JSでは、双方向バインディングはファーストクラスの市民であるため、この追加のロジックを追加する必要はありません。