我正在建立一个有角度的网站。通常,我在onInit方法中进行了后端调用,并将数据存储在组件状态中。现在,我想将redux添加到我的网站。我应该只对onInit方法采取行动,并在redux reducer中进行实际的后端调用,还是应该在组件onInit方法中进行后端调用,然后再将数据添加到redux状态?哪种方法是正确的?听说redux reducer应该是纯函数,所以执行后端调用会使函数不正确吗?
答案 0 :(得分:1)
您不应在reducer中进行后端调用。 Redux docs say:
reduceer是一个纯函数,它接受上一个状态和一个动作,然后返回下一个状态
并且:
无副作用。没有API调用。没有突变。只是计算而已。
可以通过redux-thunk,redux-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状态?
我建议您采用这种方法。