前提・実現したいこと
初回レンダリング時のuseEffectの作用を理解したい。
該当のソースコード
import { useState, useEffect } from 'react' const App = () => { const [state, setState] = useState([{id:0, name:"init"}]) const arr = [{id: 1, name: "tom"},{id: 2, name: "tim"},{id: 3, name: "tum"},{id: 4, name: "tem"}] useEffect(() => { setState([{id: 0, name: "tam"}, ...arr]) },[]) console.log(state); return ( <div> <p>{state[0].name}</p> <p>{state[1].name}</p> </div> ) } export default App
発生している問題・エラーメッセージ
TypeError: Cannot read property 'name' of undefined
試したこと
これはuseEffectがレンダリング後に実行されるためにレンダリング時に
state[1].name
に値が入っていないからだと思うのですが
<div> <p>{state[0].name}</p> <p>{state[1].name}</p> </div>
の部分を
<ul> {state.map(el => ( <li>{el.name}</li> ))} </ul>
に変更すると問題なくレンダリングされるのは何故でしょうか?
補足情報(FW/ツールのバージョンなど)
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-scripts": "4.0.1",
「useEffect は毎回のレンダー後に呼ばれるのか? その通りです!」
https://ja.reactjs.org/docs/hooks-effect.html#example-using-hooks
回答1件
あなたの回答
tips
プレビュー