React Native:使用钩子时动画回调不访问最新状态

时间:2020-10-13 11:42:14

标签: javascript reactjs react-native react-native-android react-animated

希望大家都过得愉快。 我是刚接触原生动画并遇到问题的新手。问题是我正在像这样更新Animation回调中的状态

Animated.timing(position, {
  toValue: {
    x: 500,
    y: 0,
  },
  duration: 250,
  useNativeDriver: false,
}).start(() => {
  setActiveIndex(activeIndex + 1)
});

状态已更新,但是第二次调用此动画函数时,它无法访问最新状态。如果activeIndex为0且第一次运行,则activeIndex更新为1,但是第二次调用此动画函数时,activeIndex仍为0,并且仍更新为1,依此类推。 activeIndex会在此回调外部进行更新,这只会在回调内部进行。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,我认为问题在于您没有获得和更新州的价值。请记住,设置状态是一个异步过程,到您告诉React获得activeIndex时,它可能已经过时。

解决此问题的推荐方法是对setState函数使用回调,它将获得该状态的确切先前值,如下所示:

setActiveIndex(prevIndex => prevIndex + 1)