Javascript 组件内部的设置状态将接收Props生命周期重新组合

Javascript 组件内部的设置状态将接收Props生命周期重新组合,javascript,recompose,Javascript,Recompose,每次我收到新的道具时,我都想改变当地的状态。为此,我使用生命周期HOC fromRecompose库。但这并不像我想的那么简单。我要么永远设置该值,要么在使用回调时发生堆栈溢出 从'react redux'导入{connect}; 从“重新组合”导入{withState、withProps、lifecycle、compose}; 从'ducks/entities/tests'导入{selectors,testDelete,testSubscribe}; 从“组件/测试/所有测试”导入{Test

每次我收到新的道具时,我都想改变当地的状态。为此,我使用
生命周期
HOC from
Recompose
库。但这并不像我想的那么简单。我要么永远设置该值,要么在使用回调时发生堆栈溢出

从'react redux'导入{connect};
从“重新组合”导入{withState、withProps、lifecycle、compose};
从'ducks/entities/tests'导入{selectors,testDelete,testSubscribe};
从“组件/测试/所有测试”导入{Tests};
导出默认组合(
连接(选择器、测试、{
onTestDelete:testDelete,
onTestSubscribe:testSubscribe,
}),
带state('isDeleteModeLopen','setDeleteModalShow',false),
带状态('idToDelete','setIdToDelete',0),
用道具(
({
测验,
艾德托德莱特,
setIdToDelete,
setDeleteModalShow,
onTestDelete,
onTestSubscribe,
}) => ({
测试:tests.map((t)=>
t、 合并({
onDeleteModalShow:()=>{
setDeleteModalShow(true);
setIdToDelete(t.get('id'));
},
onSubscribe:()=>onTestSubscribe(t.get('id')),
}),
),
onDeleteModalHide:()=>setDeleteModalShow(false),
onDelete:()=>onTestDelete(idToDelete),
}),
),
生命周期({
componentWillReceiveProps({setDeleteModalShow}){
setDeleteModalShow(false);//不工作“超过最大更新深度”
这是我的国家({
isDeleteModalOpen:错,
});//现在正在工作
},
}),

)(测试)有点老问题,但答案相当简单

如果您正在设置的值已经是您想要的值,则不要更改状态。在代码中,您可以更改
生命周期
增强器,以检查
isDeleteModeLopen
是否已为false,如下所示:

lifecycle({
  componentWillReceiveProps({ setDeleteModalShow, isDeleteModalOpen }) {
    if (isDeleteModalOpen) setDeleteModalShow(false);
  },
}),
这样,您的
组件将接收道具
函数将命中两次,第二次则不会执行任何操作

请注意,此组件上的任何道具更改都会将
isDeleteModeLopen
值设置为false