Too many re-renders. React limits the number of renders to prevent an infinite loop の対応
やりたいこと
- エラーを消す
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
エラーが発生する
import React, { useState } from 'react'; const AppTableRow = (props) => { const [data, setData] = useState(props); const handleChenge = () => { const obj = {/* 何らかのデータ */ }; setData(obj); }; return ( <div id={data.id}> <!-- 何らかのHTML --> <button type="button" onClick={handleChenge()}>Button</button> </div> ); };
エラーが消える
import React, { useState } from 'react'; const AppTableRow = (props) => { const [data, setData] = useState(props); const handleChenge = () => { // const obj = {/* 何らかのデータ */ }; // setData(obj); }; return ( <div id={data.id}> <!-- 何らかのHTML --> <button type="button" onClick={handleChenge()}>Button</button> </div> ); };
stackoverflowのコメントによれば、関数コンポーネントの内側でステートセッター(setData
)を呼び出していることにより、
Reactは関数を再度呼び出し、無限ループに陥っているらしい。
いまいちエラーの対応と原因について正しく認識できていないが、とりあえずメモ。