首页 > 解决方案 > 在异步效果内访问 rootState 而无需先指定有效负载

问题描述

上下文:我想要一个动作调用另外两个动作,所以我做了一个效果。在这种情况下,我需要访问 rootState。我读到effect 的第二个参数必须是 rootState,但是如果没有参数,rootState 仍然会传递给 effect

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

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

这将为 this.state 打印 undefined:

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

另外:这可能很困难,因为 redux 并非旨在以这种方式使用。如果是这样,我很高兴以另一种方式做到这一点。任何见解表示赞赏!

标签: reactjsredux

解决方案


他们的意思是即使你的函数没有参数,它仍然会参数调用。我在内部想象,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不带参数,但它是参数调用的,你仍然可以使用arguments魔法变量来访问它。

说了这么多,我只想做

async doThisAndThat(_, rootState) {

明确表示您不关心有效载荷


推荐阅读