我想在reactjs中调度一个动作。 我使用useEffect()调度:
useEffect(() => {
addData({
...cars[0],
});
}, [var]);
我的调度如下:
const addData = payload => {
dispatch({ type: 'ADD_SOMETHING', payload });
return dispatch({ type: 'UPDATE_SOMETHING' });
};
另外,我有一个条件:
const condition = a.length === b.length;
我想使用:
if (condition === true) { //Only in this case to dispatch
const addData = payload => {
dispatch({ type: 'ADD_SOMETHING', payload });
return dispatch({ type: 'ADD_SOMETHING' });
};
}
我只想在以下情况下分派:condition === true
,但是现在addData
在if
的块范围之内,我不能做我想做的事情。如何实现我的目标?
答案 0 :(得分:3)
问题是,如果将函数声明包装在if
语句块中,它将被限制在该块中。
您实际上要做的是声明函数,然后将函数调用包装在if
语句块中。
您应该这样实现:
// Take the condition out here
const addData = payload => {
dispatch({ type: 'ADD_SOMETHING', payload });
return dispatch({ type: 'ADD_SOMETHING' });
};
useEffect(() => {
// Instead, use the condition here
if (a.length === b.length) {
addData({ ...cars[0] });
}
}, [a, b]);
另一个建议:
您不应该在addData
函数中真正调度两次。
const addData = payload => {
dispatch({ type: 'ADD_SOMETHING', payload });
return dispatch({ type: 'ADD_SOMETHING' });
};
真的应该是:
const addData = payload => {
return dispatch({ type: 'ADD_SOMETHING', payload });
};
如果有意进行多次调度,那么最好在reducer
端进行处理。