我如何知道 Redux 操作何时完成
How can I find out when an Redux action is done
我正在谷歌搜索,但我没有真正找到任何东西,或者我只是不明白。我有 Redux Thunk,正在查看他们的示例,但我不确定这是否对我有帮助?
我通常会使用 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()
,用于更新组件的本地状态,可以是异步的,当你说状态更新是异步的时候,你可能就是这么想的。
我正在谷歌搜索,但我没有真正找到任何东西,或者我只是不明白。我有 Redux Thunk,正在查看他们的示例,但我不确定这是否对我有帮助?
我通常会使用 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()
,用于更新组件的本地状态,可以是异步的,当你说状态更新是异步的时候,你可能就是这么想的。