2016-03-24 13 views
0

私は自分のコンポーネントに関するいくつかの更新に苦労しています。私は州の中に小道具を設定してはならないと知っています。しかし、コンポーネントのアップデートを正しく行うためにこれを行う必要がありました。Reactネイティブの新しい小道具を受け取る、componentWillReceiveProps

componentWillReceiveProps(nextProps) { 
    this.setState({ 
     doctor: nextProps.data.name, 
     address: nextProps.data.address 
    }) 
} 

これを行うより良い方法はありますか?

shouldComponentUpdate: function(nextProps, nextState) { 
    return nextProps.id !== this.props.id; 
} 

が、私はme.c

+1

コンポーネント内の小道具を変更しないでください。その状態はどういう意味ですか... – dandavis

+0

なぜあなたの小道具を状態にする必要がありますか?あなたは突然変異していますか? React reは、そのコンポーネントで使用されている小道具が変更されたときに、そのコンポーネントをレンダリングします。 – Idiot211

+0

@ Idiot211、このアプリにはお気に入りのアイテムが保存されているListViewがあります。アイテムを開こうとすると別のコンポーネント(e。g details-item)、私がListViewに戻ったときに私はそこにまだ行き詰まっていたアイテムを消してしまいました。 componentWillReceivePropsを使用して状態を新しい小道具で更新すると、それは機能します。私はそれが理にかなってほしいと思う。 –

答えて

0

のために非常によく野生動作しませんでした:>

componentWillReceiveProps(nextProps) { 
     this.props.data.name = nextProps.data.name; 
     this.props.data.name = nextProps.data.address; 
    }) 
} 

私はshouldComponentUpdateを使用しようとしていた - 私はこれを行う場合は、最良の方法でありますここで推測する。私が知覚するように、あなたはshouldComponentUpdateを適切に実装する問題を経験します。私はあなたがnextProps.dataオブジェクトを比較しようとすると、が等しくない場合でも、という結果にならないと信じています。その理由は、dataオブジェクトへのオブジェクト参照が異なるからです。その問題を解決するには、代わりにlodash_.isEqualに似た深い比較を行う必要があります。

コメントで述べたように、componentWillReceivePropsのnextPropsを更新するのは恐ろしい考えです。あなたのコメントで

+0

ありがとう、私は見て、ありがとう私は見て、おそらくそれはいつものような愚かな何か、私はまたロダッシュを見てみましょう。 –

+0

あなたはこれに対する解決策を見つけることができましたか?私は同様の問題に立ち往生しています。私はcomponentWillReceivePropsの内部にsetStateしようとしています。 –

1

、あなたが言及:

私はアイテムが、私はまだそこに unfavouritedと他の項目は、これは完全に別の問題のように見える

姿を消したリストビューに戻ってくるときエリア。私の推測では、あなたが間違ってkeyをリストに使っていることでしょう。おそらくインデックス。キーは常に表示されているアイテムと一意でなければならず、インデックスはありません(たとえば、最初のアイテムは常にインデックス0で、リストを並べ替えるか最初のアイテムを削除すると別のアイテムはインデックス0になり、うまくいく。)Further explanation here。 「適切にコンポーネントをアップデート」について

:あなたは新しい小道具に渡すと

  • 、新しい小道具で再レンダリング自動的に反応します。このためにはcomponentWillReceivePropsに何もする必要はありません。
  • componentWillReceivePropsは、OLDとNEWの小道具を比較して状態を更新するためのものです。 (例えば、小道具の好きな数が上がったか下がったかを表示したい場合)
  • shouldComponentUpdateはオプションです。主な目的は、パフォーマンスを向上させることですコンポーネントの動作に何の変更もありません:コンポーネントが変更されていないことを早期に通知します。あなたのコンポーネントが意図したとおりに動作しない限り、shouldComponentUpdateを含めないことをお勧めします。
+0

私はコンポーネントをもう一度見ていますが、間違った場所を見ているかもしれませんが、とにかく感謝しています。 –

関連する問題