[英]How to avoid Error: Too many re-renders. React limits the number of renders to prevent an infinite loop
I am working a nextjs project.我正在做一个 nextjs 项目。
I use useform reactjs.我使用 useform reactjs。
I tried to save one of a watchfield in a state我试图在 state 中保存一个观察区
I got this error in terminal.我在终端中收到此错误。
state areaCodeundefined undefined watchAllFields undefined undefined state areaCodeundefined undefined watchAllFields undefined undefined
error - Error: Too many re-renders.错误 - 错误:重新渲染太多。 React limits the number of renders to prevent an infinite loop. React 限制了渲染的数量以防止无限循环。
I tried with this codes我试过这个代码
const {
handleSubmit,
control,
register,
watch,
getValues,
reset,
formState: { isSubmitting },
} = useForm<IPassengerForm>({
defaultValues: {
adultPassenger: [],
childPassenger: [],
infantPassenger: [],
},
resolver: yupResolver(passengerSchema),
mode: 'all',
});
const watchAllFields = watch();
console.log('watchAllFields', watchAllFields.adultPassenger[0]?.areaCode);
const getAreaCode = getValues(`adultPassenger.0.areaCode`);
console.log(getAreaCode);
if (watchAllFields.adultPassenger) {
setareaCode(String(watchAllFields.adultPassenger[0]?.areaCode));
}
<Controller
control={control}
// @ts-ignore
name={`adultPassenger.${number}.areaCode`}
render={({
field,
fieldState: { error, invalid },
}) => (
<TextField
fullWidth
helperText={error?.message}
error={invalid}
id="outlined-basic"
label="Area Code"
variant="outlined"
{...field}
{...register(
`adultPassenger.${number}.areaCode`
)}
/>
)}
/>
Why this error occur?为什么会出现这个错误? Anyone explain me?有人给我解释一下吗?
You call setareaCode
(I assume it's a useState hook) in the render and it causes one more re-render, then setareaCode
changes again and re-render happens again, etc. As a result you would get an infinite loop.您在渲染中调用setareaCode
(我假设它是一个 useState 挂钩)并导致再次重新渲染,然后setareaCode
再次更改并再次发生重新渲染,等等。结果您将获得无限循环。 To fix it, try to avoid calling functions which cause re-renders.要修复它,请尽量避免调用导致重新渲染的函数。 Instead of this, move this logic to useEffect
hooks or callbacks.取而代之的是,将此逻辑移至useEffect
挂钩或回调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.