現象
リストに表示されたデータをクリックすると、ポップアップ(子コンポーネント)が表示され、ポップアップ(子コンポーネント)のフォームにクリックされたデータが反映されるという処理を行いたかったのですが、クリックしてもクリックしてもデータが渡されている様子がなく、再レンダリングしてくれない現象が発生しました。
上記現象が起きたコンポーネントの構成は、
- 一覧ページ(親)から
登録用ポップアップコンポーネント(子)
を呼んでいる - 一覧ページ(親)から
リスト表示コンポーネント(子)
を呼んでいる -
登録用ポップアップコンポーネント(子)
を詳細表示、編集用のポップアップとしても使用している -
リスト表示コンポーネント(子)
をクリックすると、登録用ポップアップコンポーネント(子)
が表示され選択したデータの詳細が表示される
解決策
useEffect()の第2引数を[]にしていましたが、[更新したいデータ](厳密に言えば、親から渡ってきたデータ)に変更したらちゃんと再描画してくれるようになりました!
useEffect(() => {
console.log('レンダリングされたよ!!');
console.log('data: ', data);
setSelectType(data);
- }, [])
+ }, [data])