Reactsの一方向データバインディングとAngularの双方向データバインディングの違いを誰かが説明できますか


109

AngularJSとReactJSで同じToDoアプリを完全に構築すると、AngularJSの双方向データバインディングに対してReact ToDoで一方向のデータバインディングが使用されるのはなぜですか?

私はReactが次のように機能することを理解しています

Render(data)---> UI。

これはAngularとどう違うのですか?

回答:


165

角度

angularがデータバインドをセットアップするとき、2つの「ウォッチャー」が存在します(これは単純化です)。

//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プロパティに自動的に反映されます。コードからの変更とHTMLからの変更は双方向バインディングです。(このフィドルをチェックしてください)ng-model$scope

反応する

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ます。この値を更新する唯一の方法は、コンポーネント自体からです。これは、Reactコンポーネントメソッドで設定するにonChangeイベントをアタッチすることによって行われます。コンポーネントの状態に直接アクセスすることはできません。また、変更を加えることはできませんので。これは一方向のバインディングです。(このコードペンをチェックしてください<input />this.state.valuesetState<input />


9
おかげで、これは非常に有益でした。したがって、AngularはReactのRender(data)---> UIとは対照的にUI <----> Dataのように機能すると思いますか?
WinchenzoMagnifico

はい、これは非常に簡潔な方法です
Kyeotic

5
明確にするために、データバインディングの際立った点は、更新が自動的に行われることです。Reactの例では、UI→データがまだ発生していますが、デフォルトでは発生しないというだけです。onChangeリスナーを手動で設定して実行する必要がありますhandleChange。しかし、そこからは、Reactの一方向のデータバインディングにより、データ→UIの更新自動的に行われます。
Adam Zerner 2017

ちなみに、フィドルはAngularJS 1.1.1への参照を必要としていましたが、AngularJS 1.0.1への参照はもう有効ではなく、404を取得していました。まったく新しいフィドル(1.1.1参照)で同じコードを使用すると、奇妙に失敗します、それが何であるか分からない。
ジョシュサッターフィールド

194

小さな絵を描いた。私はそれが十分に明確であることを望みます。そうでない場合はお知らせください!

2ウェイデータバインディングVS 1ウェイデータバインディング


21
「Titre de l'annonce」とは何ですか?
ghd

6
フランスの「広告タイトル」
timelf123

14
@DamienRocheがこの概念を理解している限り、違いは次のとおりです。2つの方法でデータバインディング:データを変更するとビューが変更され、その逆も同様です。ビュー内の入力を更新すると、データが更新されます。進行中のデータフロー:データの更新はビューを更新しますが、ビューの入力を更新しても、プログラマがデータを更新する入力にリスナーをアタッチして明示的に実行しない限り、データは更新されません。それがあなたにとってもう少し明確になることを願っています。
Cake_Seller 2017年

2
@Patrick、ありがとうございます。私は自分がしたことが他の人に役立つと感じていつもとても幸せです
ガブリエル

リンクが壊れています@Gabriel投稿で画像を共有できますか?
user3141326 2018

12

双方向データバインディングは、プロパティの値を取得してビューに表示する機能を提供すると同時に、モデルの値を自動的に更新するための入力も備えています。たとえば、ビューにプロパティ "task"を表示し、テキストボックスの値をその同じプロパティにバインドできます。したがって、ユーザーがテキストボックスの値を更新すると、ビューは自動的に更新され、このパラメーターの値もコントローラーで更新されます。対照的に、一方向バインディングはモデルの値をビューにバインドするだけであり、ビューの値がユーザーによって変更されたかどうかを判断する追加のウォッチャーはありません。

React.jsに関しては、それは実際には双方向データバインディング用に設計されていませんが、いくつかの追加のロジックを追加することで双方向バインディングを手動で実装できます。たとえば、このリンクを参照してください。Angular.JSでは、双方向バインディングはファーストクラスのシチズンであるため、この追加のロジックを追加する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.