我怎样才能知道什么时候执行Redux动作
问题描述:
我在使用Google,并且我没有真正发现任何东西,或者我只是不明白它。我有Redux Thunk,我正在通过他们的例子,但我不确定这是否会对我有帮助?我怎样才能知道什么时候执行Redux动作
我通常会使用Promise ..但从我了解Redux更新状态时,它完成异步..所以我不认为这会工作?
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function doStuff() {
// What I'd like to do:
dispatch(setComposition).then(() => {
console.log('done');
});
}
编辑:
这是我在想什么做的......但我不认为会工作,因为没有国家获得异步更新?
export function setComposition(composition) {
return Promise.resolve(
return { type: types.SET_COMPOSITION, composition };
);
}
答
你应该添加一个动作,以检查是否异步操作完成后:
export function setComposition(composition) {
return { type: types.SET_COMPOSITION, composition };
}
export function successComposition() {
return { type: types.SET_COMPOSITION_SUCCESS };
}
export function doStuff() {
// What I'd like to do:
dispatch(setComposition());
yourAsyncFunction.then(() => {
console.log('done');
dispatch(successComposition());
});
}
答
问得好! Redux Thunk用于确保异步操作(例如通过axios向数据库发出请求)确实会异步处理。
因此,除非您的setComposition操作需要异步,否则不需要使用thunk。因为它是同步的,你可能只是这样做的时候看到它完成的情况下:
dispatch(setComposition(compositionToSet)) //remember to pass in composition instance!
console.log('all done!')
除非您撰写的生产代码和行动正在分批,上述更新Redux的应该是同步的。
此外,应该注意的是,this.setState()
用于更新组件的本地状态可以是异步的,这可能是您在说状态更新为异步时所考虑的内容。
当你做派遣(setComposition)...是不是异步? (我使用thunk)。那么console.log('done')可能会在组合设置为全局状态之前被调用?除非我理解了所有这些不正确.. – user1189352
Redux-thunk允许分派异步函数,但是你的setComposition动作不是异步的,在这种情况下,你有两个简单的动作开始和结束的异步doStuff动作。 –
谢谢,所以我的理解错了 – user1189352