reactjs - 在异步效果内访问 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 并非旨在以这种方式使用。如果是这样,我很高兴以另一种方式做到这一点。任何见解表示赞赏!
解决方案
他们的意思是即使你的函数没有参数,它仍然会用参数调用。我在内部想象,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) {
明确表示您不关心有效载荷
推荐阅读
- android - WebView 在 HTTPS url 上显示 net::ERR_CLEARTEXT_NOT_PERMITTED
- python - 在 os.path.join() 函数中包含通配符以创建文件路径
- android - Andriod Gradle Sync 离线模式失败
- python - 如何使用python从网站实时获取一些数据?
- office365 - 适用于 Web 应用程序的 Office 365 JSON 接口的文档
- amazon-web-services - 更新堆栈时使用现有的 DBUser 和 DBPassword 参数值
- cross-validation - 如何在 k-fold CV 设置中组织 Ray Tune Trainable 类计算?
- tensorflow - TensorFlow - 在 TF1.14 中,我如何将 RaggedTensor 变成张量或如何填充它?
- azure - Azure 数据工厂 - 启用 git n azure 数据工厂时,触发器不起作用
- angular - 无法绑定到 Angular 9 自定义指令