在Redux中使用reducer进行后端调用是否可以?

时间:2019-12-14 19:27:59

标签: angular redux redux-store ngredux

我正在建立一个有角度的网站。通常,我在onInit方法中进行了后端调用,并将数据存储在组件状态中。现在,我想将redux添加到我的网站。我应该只对onInit方法采取行动,并在redux reducer中进行实际的后端调用,还是应该在组件onInit方法中进行后端调用,然后再将数据添加到redux状态?哪种方法是正确的?听说redux reducer应该是纯函数,所以执行后端调用会使函数不正确吗?

2 个答案:

答案 0 :(得分:1)

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

  

reduceer是一个纯函数,它接受上一个状态和一个动作,然后返回下一个状态

并且:

  

无副作用。没有API调用。没有突变。只是计算而已。

可以通过redux-thunkredux-saga或在纯Redux中间件中进行副作用调用来完成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())

异步副作用将在分派调用之后但在减速器执行该操作之前发生。

答案 1 :(得分:0)

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

  

我应该在组件的onInit方法中进行后端调用,然后添加   数据稍后会恢复为Redux状态?

我建议您采用这种方法。