2017-11-15 7 views
0

私はReactで新しく、私は混乱させるようなものを見つけました。親の状態が変わるたびに反応機能コンポーネントが呼び出されます

ほぼすべてのチュートリアルでは、機能(ステートレス)コンポーネントの使用を提案しています。 しかし、最近私は、機能コンポーネントが子コンポーネントである場合、親コンポーネントの状態や小道具が変更されるたびにレンダリングされ、小道具を渡さなくてもレンダリングされることを発見しました。 クラスベースのコンポーネントでは発生しません。 このような状況の理由は何ですか?

最高のパフォーマンスを得るためにクラスベースのコンポーネントのみを使用する必要がありますか?ここで

答えて

2

あなたのオプションは、ボックスの外にある:あなたがやったように

  1. は純粋な機能を使用します。

    • [+]簡単に書くことと
    • 理解するために、[を - ]再レンダリング親コンポーネントが再レンダリングされるたびに(何らかの小道具を渡さないと問題にならないかもしれません)
  2. クラスコンポーネントを使用してshouldComponentUpdateを実装します

      [+]再レンダリング条件を完全に制御できます。
    • [ - ]は[ - ]
  3. PureComponent

    • [+]を
    • を書くために以下のコードので、自動的に浅いshouldComponentUpdateを使用して使用を書くことをより多くのコードを取ることができます望ましくない副作用(複雑なオブジェクトや正しくないレンダリングでない非純粋な子コンポーネントの偽陰性)

あなたの子供のコンポーネントに小道具を渡していないので、純粋な関数を使用することは完全に受け入れられます。それはその純粋な静的なHTMLを意味し、たとえそれが親の一部であったとしてもいつでも再レンダリングするからです。

最後に、より高度な用途のために、あなたの答えのためのhttps://github.com/acdlite/recompose

+0

感謝を見ているが、それでも私は、これらの再レンダリングに問題があるクラスコンポーネント – user3852961

+0

とは対照的に、なぜ機能コンポーネントの再レンダリングを知らないこと分かりますか?仮想ドームとそれに対する解像度モデルは、実際には非常に安価なCPUを変更しないレンダリングを行います。さらに、クラスベースの子コンポーネントが再レンダリングしないと信じているかどうかはわかりません。 接続されたコンポーネントを意味するのでしょうか? https://www.codecademy.com/articles/react-virtual-dom – billjamesdev

+0

機能コンポーネントは単なるダム関数です。それらはコード内に存在するたびに実行されます。クラスコンポーネントはshouldComponentUpdateメソッドを実装していない限り、同じ方法で再レンダリングします。 – klugjo

関連する問題