在Redux中更新状态后如何触发回调?

React.js

2020-03-16

在React中,状态不会立即更新,因此我们可以在中使用回调setState(state, callback)但是在Redux中如何做呢?

调用之后this.props.dispatch(updateState(key, value)),我需要立即对更新后的状态进行处理。

有什么方法可以像我在React中那样以最新状态调用回调?

第1648篇《在Redux中更新状态后如何触发回调?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

4个回答
Harry神奇路易 2020.03.16

关于React的最重要的一点是单向数据流。在您的示例中,这意味着调度动作和状态更改处理应该分开。

您不应该像“我做了A,现在X就成为,现在就去Y处理”那样思考,而是“当X成为时我该做什么Y”,而与无关A商店状态可以从多个来源进行更新,除了您的组件外,Time Travel还可以更改状态,并且不会通过您的A调度点传递

基本上,这意味着您应该使用componentWillReceiveProps@Utro提出的建议

神无前端 2020.03.16

您可以在回调中使用thunk

myThunk = cb => dispatch =>
  myAsyncOp(...)
    .then(res => dispatch(res))
    .then(() => cb()) // Do whatever you want here.
    .catch(err => handleError(err))
猪猪小卤蛋 2020.03.16

作为一个简单的解决方案,您可以使用: redux-promise

但是,如果您使用redux-thunk,则应该这样做:

function addCost(data) {
  return dispatch => {
    var promise1 = new Promise(function(resolve, reject) {
      dispatch(something);
     });
    return promise1;
  }
}

录泰红木 2020.03.16

您可以使用subscribe侦听器,并且在分派操作时将调用它。在侦听器内部,您将获取最新的商店数据。

http://redux.js.org/docs/api/Store.html#subscribelistener

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android