React Native:动画回调在使用挂钩时不访问最新状态
React Native: Animation callback does not access latest state while using hooks
希望你们今天过得愉快。
我刚开始对原生动画做出反应,运行 遇到了问题。问题是我正在像这样更新动画回调中的状态
Animated.timing(position, {
toValue: {
x: 500,
y: 0,
},
duration: 250,
useNativeDriver: false,
}).start(() => {
setActiveIndex(activeIndex + 1)
});
状态已更新,但第二次调用此动画函数时,它无法访问最新状态。如果 activeIndex 为 0 并且它第一次运行时 activeIndex 更新为 1 但是当第二次调用此动画函数时 activeIndex 仍然为 0 并且它仍然更新为 1 等等。 activeIndex 在此回调外部更新,这仅发生在回调内部。
任何帮助将不胜感激。
好的,我认为问题是您没有获取和更新状态值。请记住,设置状态是一个异步过程,当您告诉 React 获取状态时 activeIndex
它可能是陈旧状态。
解决此问题的推荐方法是使用 setState
函数的回调,它将获得该状态的准确先前值,如下所示:
setActiveIndex(prevIndex => prevIndex + 1)
希望你们今天过得愉快。 我刚开始对原生动画做出反应,运行 遇到了问题。问题是我正在像这样更新动画回调中的状态
Animated.timing(position, {
toValue: {
x: 500,
y: 0,
},
duration: 250,
useNativeDriver: false,
}).start(() => {
setActiveIndex(activeIndex + 1)
});
状态已更新,但第二次调用此动画函数时,它无法访问最新状态。如果 activeIndex 为 0 并且它第一次运行时 activeIndex 更新为 1 但是当第二次调用此动画函数时 activeIndex 仍然为 0 并且它仍然更新为 1 等等。 activeIndex 在此回调外部更新,这仅发生在回调内部。
任何帮助将不胜感激。
好的,我认为问题是您没有获取和更新状态值。请记住,设置状态是一个异步过程,当您告诉 React 获取状态时 activeIndex
它可能是陈旧状态。
解决此问题的推荐方法是使用 setState
函数的回调,它将获得该状态的准确先前值,如下所示:
setActiveIndex(prevIndex => prevIndex + 1)