2016-07-06 10 views
5

私はしばらくReactJSを学んできました。 ReactJSが小道具、要素などのような多くの面で不変性を使用する理由は、私に困惑していることの1つです。これには特別な理由はありますか?この背後にある哲学は何ですか?ReactJSと不変性

propsに新しいプロパティを追加しようとすると、以下のエラーが発生します。

キャッチされない例外TypeErrorは:プロパティに私を追加することはできません、オブジェクトがこの背後にある考え方は、一方向のデータフローである

答えて

3

リアクションは、明らかなパフォーマンス上の理由から不変性を使用します。あなたが状態を設定するたび 例えば

アイデアがある、あなたは状態を変異いけないが、あなたはそれの一部のクローンを作成し、次にあなたがすべき例

this.state = { 
entries: [1,2,3] 
} 

については状態

を更新

あなたはshouldComponentUpdate

012を使用する場合
this.state.setState({ 
entries: this.state.entries.slice().push(9); //not this.state.entries.push(9) 
}) 

パフォーマンスの向上が達成されていますshouldComponentUpdateで

は、あなただけの参照を比較し、によるものではない深いはるかに予測可能な双方向のバインディングよりも、私はその一方向のデータフローを追加したい

shouldComponentUpdate(prevState,newState){ 
    return prevState.entries != newState.entries 

} 
+0

ここで実際に達成したパフォーマンスの向上についてもう少し詳しく説明できますか? – VJAI

+0

この特定の例では、おそらくそれほど多くはないが、データサイズと他のコンポーネントの欠如を考慮する。状態が変化したときに更新されない単一のコンポーネントツリーを有するコンポーネントの複数のツリーを有するより大きなアプリケーションでは、再レンダリング中のアプリケーション性能を大幅に増加させる可能性がある。 –

5

拡張可能ではありません - データは、(トップレベルから葉のコンポーネントに)流下してアクションがアップして流れます。

コンポーネントは、そのデータを小道具から受け取り、何かを変更するために、親にコールして何かを変更するように要求しなければなりません。

公式サイトのThinking in Reactページで詳細を読むことができます。それは概念をきちんと説明しています。

+2

を確認することができます。後者は概念的に理解しやすいかもしれませんが、前者はデバッグ/予測の容易さで勝ちます。 – lux

関連する問題