在Redux传奇中成功调度动作后如何清除本地状态?

时间:2019-05-08 23:31:21

标签: javascript reactjs redux-saga

在redux传奇中成功调用后,我试图清除组件状态。我该怎么办?

我正在尝试使用组件状态作为输入值

this.state = {
    department: '',
};

我当前的解决方案如下:

add(department).then(action => {
    if(action.type.endsWith('SUCCESS')) {
       this.setState({department: ''})
    }
})

在成功完成传奇之后,我正在尝试清除输入内容。

1 个答案:

答案 0 :(得分:0)

我通常采用的方法是让saga更新redux存储中的值,并让组件检查该更改。这可能包括在componentDidUpdate中运行一些代码。

如果您想避免在商店中添加商品,我可以考虑另一种可能性,尽管有点麻烦:您可以创建一个promise并通过它的resolve和reject方法作为调度动作的一部分。然后在传奇中,它可以要求那些人兑现诺言。例如:

export function* addDepartment(action) {
  const { department, resolve, reject } = action;
  try {
    // do something async with department
    resolve();
  } catch (ex) {
    reject(ex);
  }
}

像这样在组件的mapDispatchToProps中使用:

const mapDispatchToProps = (dispatch) => ({
  add: (department) => {
    return new Promise((resolve, reject) => {
      dispatch({ type: 'ADD', department, resolve, reject });
    });
  }
});

...,并在适当的组件中像这样:

this.props.add('some department')
  .then(() => this.setState({ department: '' })
  .catch((err) => console.log('an error occurred', err));