2017-08-30 18 views
0

小道具を最初に受け取り、その後の小道具の変更時に関数を実行したいと思います。したがって、私は小道具をチェックし、この機能をcomponentDidMountcomponentWillReceivePropsの両方で実行する予定でした。しかし、これは冗長なようです。私は人々が小道具をチェックしてrender()の機能を実行するのを見てきましたが、私はこれが怒鳴りつけられたという印象の下にいました。(React)初期小道具を含む小道具変更のメソッドを実行

私の解決策は何ですか?

+2

最初の方法を試しましたか?これを 'componentDidMount'と' componentWillReceiveProps'の両方に追加すると少し冗長に見えるかもしれませんが、これはあなたが探している振る舞いに最もよく似ている2つのライフフックかもしれません。すべてのサイクルをレンダリングする前 –

+0

shouldComponentUpdate/componentWillUpdateは私は思いません – TimCodes

+0

、と呼ばれている 'componentWIllUpdate'レンダリング最初の前に呼び出されます。https://facebook.github.io/react/docs/react-component.html#componentwillupdate –

答えて

2

componentDidMountcomponentWillReceivePropsの両方を1つのコールバックにキャッチする代用はありません。これを行う最善の方法は、関数を定義し、これらのコールバックの両方から関数を呼び出すことです。私は小道具をチェックし

この機能を実行する上で計画していた

は、あなたが何をしようとしての非常に漠然とした説明です。ちょうどちょうど小道具をチェックすることはrender機能の内部で行われれば問題ではないように思われます。しかし、このパーツがコンポーネントの再レンダリングを引き起こす(できます)副作用を引き起こしていると問題になります。これが当てはまる場合、私は「怒っている」と軽く言います。この問題は、レンダリング機能が副作用を追加していることになります。副作用によって、より多くの再レンダリングがトリガされます。それは即座にあなたのアプリのパフォーマンスを殺すだろうし、すべてのものが停止するように粉砕することさえできます。

0

あなたの質問はReactとReduxの両方でタグ付けされています。 connectで使用するmapStateToProps関数を使用していますか?

mapStateToProps関数でこのアクションをディスパッチする(またはこの関数を実行する)可能性があります。これは、最初に実行され、それからredux状態を更新するたびに実行されるためです。あなたはアクション/機能がまだ別の状態変更を引き起こさないことを確かめなければならないでしょう。そうすれば、あなたはループで終わるでしょう。

編集:@DuncanThackerはmapStateToPropsは、パフォーマンスの問題が生じ、非常に多くの場合、発火性があるため、これは、良いアイデアではないかもしれないと指摘しました。いい視点ね。

+1

私はこれをお勧めしません。 mapStateToProps()での処理は非常に頻繁に実行され、パフォーマンスの問題を引き起こす可能性があるため危険です。 –

+0

@DuncanThackerええ、これは妥当な懸念のようです。私の答えを編集します。ありがとう! – jonahe