在不首先指定负载的情况下访问异步效果中的 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) {
明确表示您不关心负载
背景:我想有一个动作调用另外两个动作,所以我做了一个效果。在这个效果中,我需要访问 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) {
明确表示您不关心负载