質問の内容としてはタイトルの通りです。
具体的には以下の通りです。
reactのuseStateで以下のように記述をすると無限ループが起きてしまいます。
const App = () => { const [count, setCount] = useState(0); return ( <> <p>{count}</p> <button onClick={setCount(count + 1)}>+1</button> </> ); };
無限ループが起きる仕組みとしては以下のように認識をしております。
- Reactはstateが更新された時に再レンダリングが起きる。
- 上記のコードの場合、setCount関数がonClickをした時ではなく、マウント時に実行されてしまう。
- そのためマウント時にsetCountが実行→count(state)が更新→再レンダリングが発生→setCountが実行→count(state)が更新→・・・この繰り返しによって無限ループが起きる。
解決策として、下記のようにonClick時の関数にアロー関数を用いる事で解決できることはさまざまな記事に書かれているのですが、なぜアロー関数にすると解決されるのかがわかりません。
<button onClick={() => setCount(count + 1)}>+1</button>
具体的には、自分の認識の2に書いた「setCount関数がonClickをした時ではなく、マウント時に実行されてしまう。」の部分が理解できていません。
なぜ、アロー関数で記述をするとonClick時にsetCount関数が実行されるのでしょうか?
わかる方いましたら、教えてください。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/29 06:06