简体   繁体   English

如何避免错误:重新渲染过多。 React 限制渲染次数以防止无限循环

[英]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.

相关问题 React - 错误:重新渲染太多。 React 限制渲染次数以防止无限循环 - React - Error: Too many re-renders. React limits the number of renders to prevent an infinite loop React-Error:重新渲染太多。 React 限制渲染次数以防止无限循环 - React-Error: Too many re-renders. React limits the number of renders to prevent an infinite loop 错误:重新渲染过多。 React 限制了渲染的数量以防止无限循环。 - 反应 JS - Error: Too many re-renders. React limits the number of renders to prevent an infinite loop. - React JS 反应错误:重新渲染太多。 React 限制渲染次数以防止无限循环 - React Error: Too many re-renders. React limits the number of renders to prevent an infinite loop 反应:错误:重新渲染太多。 React 限制渲染次数以防止无限循环 - React: Error: Too many re-renders. React limits the number of renders to prevent an infinite loop 错误:重新渲染过多。 React 限制渲染次数以防止无限循环。 反应 - Error: Too many re-renders. React limits the number of renders to prevent an infinite loop. React 错误:重新渲染过多。 React 限制了渲染的数量以防止无限循环。 - 反应 - Error: Too many re-renders. React limits the number of renders to prevent an infinite loop. - React 反应使用状态错误:重新渲染太多。 React 限制渲染次数以防止无限循环 - react usestate Error: Too many re-renders. React limits the number of renders to prevent an infinite loop 未捕获的错误:重新渲染太多。 React 限制渲染次数以防止无限循环。 错误 - Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite loop. error 服务器错误错误:重新渲染太多。 React 限制渲染次数以防止无限循环 - Server Error Error: Too many re-renders. React limits the number of renders to prevent an infinite loop
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM