ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.

スポンサードリンク

useEffectを削除したら消えた。なるほど。

const { setValue } = useForm()
// 省略
useEffect(() => {
    // 省略
    setValue('variable.hoge', hoge)
}, [storeVariable])

こんな感じの処理を書いてた。

次に、useEffectを消さずに、setValueだけ消したらエラーは消えた。

で、色々探っていくと

  • useEffectで更新しているstoreと関係ないstoreを第二引数に渡していた
  • useEffectで更新しているstoreを第二引数に渡したらwarningが消えた
  • ただ、1番目で指定した関係ないstoreがなぜsetValueしたタイミングで更新されているのかがわからない

モヤッとしている感じでメモ

追記

どうやらsetValue関係なくて、useEffectの外で宣言しているyupのvalidationで再描画走っているときにstoreVariableが更新されるから無限ループするっぽい。なるほど〜