【发布时间】:2017-04-18 04:20:42
【问题描述】:
我有以下动作创建者:
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}
}
问题是 scrollToNextItem 在 appendItem 完成之前运行并且滚动位置最终不正确。我可以通过添加setTimeout 来证明是这种情况,以使脚本的执行在运行scrollToNextItem 之前等待下一个滴答声:
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
setTimeout(() => {
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}, 0);
}
}
如何等待appendItem 操作完成?在标准反应领域,我只会使用setState 回调:
this.setState({something: 'some thing'}, () => {
console.log('something is set');
});
但dispatch 不提供任何回调功能。
【问题讨论】:
-
appendItem 看起来如何?
-
追加项目只是一个简单的动作。
-
那么它应该是同步的,当你到达 setTimeout 时,appendItem 已经完成@mikeRifgin
-
看看 Hooks Api 中的“useEffect”,它可能对你正在寻找的东西有用。