【问题标题】:Is it ok to make backend call using reducer in redux?在redux中使用reducer进行后端调用可以吗?
【发布时间】:2019-12-15 04:11:43
【问题描述】:

我正在建立一个有角度的网站。通常我在 onInit 方法中进行后端调用并将数据存储在组件状态中。现在我想将 redux 添加到我的网站。我应该只对 onInit 方法进行操作并在 redux reducer 中进行实际的后端调用,还是应该在我的组件 onInit 方法中进行后端调用并稍后将数据添加到 redux 状态?哪一个是正确的做法?听说redux reducer应该是纯函数,后端调用是不是让函数不纯了?

【问题讨论】:

    标签: angular redux redux-store ngredux


    【解决方案1】:

    您不应该在 reducer 中进行后端调用。 Redux docs say:

    reducer 是一个纯函数,它接受前一个状态和一个动作,并返回下一个状态

    还有:

    没有副作用。没有 API 调用。没有突变。只是一个计算。

    Redux 中的副作用可以通过redux-thunkredux-saga 完成,或者在普通的 Redux 中间件中进行副作用调用。

    在这些选项中,redux-thunk 最容易上手。它允许您在操作中执行异步/副作用。

    // store.js
    import thunk from 'redux-thunk';
    const myReduxStore = createStore(myRootReducer, applyMiddleware(thunk));
    
    // actions.js
    const myAction = (someArg) => {
      return dispatch => {
        myApiCall().then(result => {
          dispatch({ type: 'YAY_SUCCESS', result })
        })
      }
    }
    

    然后当你派发动作时

    dispatch(myAction())
    

    异步副作用将在调度调用之后、reducer 接收操作之前发生。

    【讨论】:

      【解决方案2】:

      是的,你不应该在 reducer 中进行 api 调用,因为它们应该是纯粹的并且没有任何副作用。

      我是否应该在我的组件 onInit 方法中进行后端调用并添加 稍后将数据转换为 redux 状态?

      我建议采用这种方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-25
        • 2017-03-22
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 2011-02-26
        相关资源
        最近更新 更多