我看到了几个有关此常见错误的主题,但我没有发现与使用recompose相关的任何内容。

语境

我有这个withStateHandler

withStateHandlers(
    {
      bookingValidation: false,
    },
    {
      setBookingValidation: ({ bookingValidation }) => () => ({
        bookingValidation: !bookingValidation,
      }),
    },
  ),


而我有这个lifeCycle

lifecycle({
    componentDidMount() {
      const { getFamily } = this.props;
      getFamily();
    },
    componentWillReceiveProps(prevProps) {
      const { formValues } = prevProps;
      const { setBookingValidation } = this.props;
      const {
        locationId,
        specialityId,
        serviceId,
        cancellationDetails,
        personId,
        date,
      } = formValues;

      const allFormValuesSelected = !!(
        locationId &&
        specialityId &&
        serviceId &&
        cancellationDetails &&
        personId &&
        date
      );

      if (allFormValuesSelected) setBookingValidation();
    },
  }),


这是一个简单的验证,当我具有所有selectedValues时,bookingValidation的状态将在true上更改,并且您可以单击一个按钮。

问题

如果输入if (allFormValuesSelected) setBookingValidation();,则由于功能setBookingValidation()而超出了最大更新深度


我如何避免这种行为?
有没有办法维持这个功能?

最佳答案

这是因为setBookingValidation()更改属性值并调用componentWillReceiveProps。这样您就可以无限通话。

如果要执行表单验证,则应将该功能移到单独的withHandlers()方法中并调用onChange事件。

关于javascript - 重新组合超过了最大更新深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58692308/

10-12 01:47