我有一个简单的React Native应用程序,其中设置了Redux存储。基本上,我想添加一个新故事,分派Redux操作并在创建后转换到这个新故事。
我在容器组件中有以下代码,当用户点击“添加”按钮时运行。
addStory() {
this.props.actions.stories.createStory()
.then(() => Actions.editor({ storyId: last(this.props.stories).id }); // makes the transition)
}
以下是动作创造者。
export const createStory = () => (dispatch) => {
dispatch({ type: CREATE_STORY, payload: { storyId: uniqueId('new') } });
return Promise.resolve();
};
正如您所看到的,我在操作创建器中返回一个Promise。如果我不在这里返回Promise,则转换将在状态更新之前进行。
这对我来说似乎有点奇怪 - 为什么我必须在这里返回已解决的Promise?难道调度程序不应该是同步的吗?
.then(() => Actions.editor
。如果你不想使用promise,可以使用回调函数,但在这种情况下,promise更好。 - Dhruv Kumar Jha.then
将只在它被解决后调用。如果希望在出现错误的情况下执行其他操作,请使用.catch
。 - Dhruv Kumar JhacreateStory()
然后调用转换Action.editor({ // ... })
,应用程序将转换到倒数第二个故事,因为状态尚未更新。 - Ben LimeaddStory()
中轻松地如果可能的话获取/设置id,然后使用该id进行转换,你也可以使用setTimeout
- 我不建议这样做。总之,使用Promise
很好,因为如果以后你想在更新状态之前将数据保存到数据库中,你可以这样做而不更改转换代码,但如果不是这种情况,那么你可以使用回调函数。 - Dhruv Kumar Jha