内部条件调用功能

时间:2020-04-07 08:30:50

标签: reactjs

我想在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,但是现在addDataif的块范围之内,我不能做我想做的事情。如何实现我的目标?

1 个答案:

答案 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端进行处理。