现在,我使用redux-starter-kit制作了两个减速器(学生减速器和考试减速器)。如何在学生减速器中访问考试减速器的状态?另外,我们可以在学生减速器中调用考试的调度功能来修改考试状态吗?
examReducer.js
const exam = createSlice({
initialState: {
mathScore: 0
},
reducer: {
setMathScore: (state, action) => {
state.mathScore = action.payload;
}
}
});
studentReducer.js
const student = createSlice({
initialState: {
pass: false
},
reducer: {
setMathScore: (state, action) => {
//try to get math score from exam reducer
state.pass = /*TODO*/ > 70 ? true : false;
}
}
});
store.js
const store = configureStore({
reducer: {
exam: exam.reducer,
student: student.reducer
}
});
答案 0 :(得分:0)
您不能“访问另一个reducer的状态”,因为那通常不是Redux的工作方式。在这方面,Redux入门套件没有什么特别的。
根据Redux FAQ entry on "sharing state between reducers":
许多用户后来想尝试在两个化简器之间共享数据,但是发现
combineReducers
不允许他们这样做。可以使用几种方法:
- 如果精简器需要从另一个状态片中了解数据,则可能需要重新组织状态树的形状,以便单个精简器可以处理更多数据。
- 您可能需要编写一些自定义函数来处理其中的某些操作。这可能需要用您自己的顶级reducer函数替换
combineReducers
。您还可以使用reduce-reducers之类的实用程序来运行combineReducers
来处理大多数操作,还可以为跨状态片的特定操作运行更专业的化简器。- 诸如redux-thunk之类的异步操作创建者可以通过
getState()
访问整个状态。动作创建者可以从状态中检索其他数据并将其放入动作中,以便每个化简器具有足够的信息来更新其自己的状态片。
此外,您肯定不能在reducer内调度动作。禁止这样做,将引发错误。