我怎样才能知道什么时候执行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()); 
    }); 
} 
+0

当你做派遣(setComposition)...是不是异步? (我使用thunk)。那么console.log('done')可能会在组合设置为全局状态之前被调用?除非我理解了所有这些不正确.. – user1189352

+1

Redux-thunk允许分派异步函数,但是你的setComposition动作不是异步的,在这种情况下,你有两个简单的动作开始和结束的异步doStuff动作。 –

+0

谢谢,所以我的理解错了 – user1189352

问得好! Redux Thunk用于确保异步操作(例如通过axios向数据库发出请求)确实会异步处理。

因此,除非您的setComposition操作需要异步,否则不需要使用thunk。因为它是同步的,你可能只是这样做的时候看到它完成的情况下:

dispatch(setComposition(compositionToSet)) //remember to pass in composition instance! 
console.log('all done!') 

除非您撰写的生产代码和行动正在分批,上述更新Redux的应该是同步的。

此外,应该注意的是,this.setState()用于更新组件的本地状态可以是异步的,这可能是您在说状态更新为异步时所考虑的内容。