在不首先指定负载的情况下访问异步效果中的 rootState

Access rootState within async effect without specifying payload first

背景:我想有一个动作调用另外两个动作,所以我做了一个效果。在这个效果中,我需要访问 rootState。我读到 the second argument of an effect must be the rootState, but if there are no arguments, the rootState is still passed to the effect

这有效并会打印出 rootState(但我不需要有效负载):

effects: {
       async doThisAndThat(payload, rootState) {
            console.log(rootState);  // prints out rootState just fine
            rootState.doThis();
            rootState.doThat();
        },
}

这会打印 undefined for this.state:

effects: {
       async doThisAndThat() {
            console.log(this.state);  // prints undefined
            this.state.doThis();
            this.state.doThat();
        },
}

另外:这可能很困难,因为 redux 并非设计为以这种方式使用。如果是这样,我很乐意以另一种方式来做。任何见解表示赞赏!

他们的意思是即使你的函数没有参数,它仍然会被调用个参数。我在内部想象,redux 有这样的东西:

let rootState = { user: 'foo@bar.com' };

const callAction = (fn) => (payload) => {
    fn(payload, rootState)
}

function doThisAndThat() {
    const rootState = arguments[1];
    console.log('doThisAndThat', {rootState});
}

callAction(doThisAndThat)({ payload: 'ignore this' });

在哪里你可以看到 doThisAndThat 没有参数,但它被称为 with 参数,你仍然可以使用 arguments 魔法变量访问它.

话虽如此,我会做的

async doThisAndThat(_, rootState) {

明确表示您不关心负载