RematchJS - 如何在不发送有效负载的情况下访问模型效果中的状态



我正在使用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);
}

相关内容

最新更新