我如何知道 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(),用于更新组件的本地状态,可以是异步的,当你说状态更新是异步的时候,你可能就是这么想的。