0

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

4

2 回答 2

1

您不应该在 reducer 中进行后端调用。Redux 文档说

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 接收操作之前发生。

于 2019-12-14T19:30:22.947 回答
0

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

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

我建议采用这种方法。

于 2019-12-14T19:29:45.043 回答