我看到了几个有关此常见错误的主题,但我没有发现与使用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/