我正在使用RematchJS,我想在模型效果中访问状态,而不向效果发送有效载荷。
模型看起来像这样:
export const session = createModel<RootModel>()({
state: {
...
} as SessionModel,
reducers: {
setAuthenticated(state, payload) {
return {
...state,
isAuthenticated: payload,
};
}
},
effects: (dispatch) => ({
async logout(payload, rootState) {
const sessionId = rootState.session.sessionId;
if (sessionId) {
await ApiClient.logout(sessionId);
dispatch.session.setAuthenticated(false);
}
}
}),
});
问题是,由于有效载荷在效果中首先出现,所以在分派效果时必须发送一些有效载荷,否则typescript会报错:
dispatch.session.logout(somePayload);
我通过调用dispatch.session.logout(null);
来解决这个问题,但感觉不正确。
有没有更好的解决方案?
传递第一个参数为_:void。试着让它工作
effects: (dispatch) => ({
async logout(_:void, rootState) {
const sessionId = rootState.session.sessionId;
if (sessionId) {
await ApiClient.logout(sessionId);
dispatch.session.setAuthenticated(false);
}
}
}),
您可以使用dispatch
对象中可用的getState
函数
// use getState() to access the state in the effect
const sessionId = dispatch.getState().session.sessionId;
if (sessionId) {
await ApiClient.logout(sessionId);
dispatch.session.setAuthenticated(false);
}