当前位置: 首页 > 知识库问答 >
问题:

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

卢英范
2023-03-14

希望你们今天过得愉快。我是第一次对原生动画做出反应,遇到了一个问题。问题是我正在更新动画回调中的状态,就像这样

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个答案

那铭
2023-03-14

好的,我认为问题在于你没有得到状态的更新值。请记住,设置状态是一个异步过程,当您告诉React to getactiveIndex时,状态可能已过时。

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

setActiveIndex(prevIndex => prevIndex + 1)
 类似资料:
  • 编辑(2020年6月22日):由于这个问题引起了一些新的兴趣,我意识到可能会有一些困惑。因此,我想强调:问题中的例子是作为玩具的例子。它没有反映问题。引发这个问题的问题是使用第三方库(对该库的控制有限),该库将回调作为函数的参数。提供最新状态的回调的正确方法是什么?在反应类中,这可以通过使用this来完成。在React钩子中,由于状态封装在函数中的方式,如果回调通过获取状态,它将是过时的(值设置回

  • 问题内容: 我正在尝试新的React Hooks,并有一个带有计数器的Clock组件,该计数器应该每秒增加一次。但是,该值不会增加到超过一。 问题答案: 原因是传递给的闭包中的回调仅访问第一个渲染器中的变量,而无法访问后续渲染器中的新值,因为第二次未调用。 回调中的值始终为0 。 就像您熟悉的状态挂钩一样,状态挂钩有两种形式:一种是处于更新状态的状态,另一种是将当前状态传入的回调形式。您应该使用第

  • 我正在试用新的反应挂钩,并有一个时钟组件,计数器应该每秒钟增加一次。但是,该值不增加超过1。

  • 问题内容: 是否有人在React 16.8中为useState挂钩的更新部分创建了同步回调?我一直在寻找一种方法,这样我就可以使用第三方库来处理同步操作,而我似乎无法根据自己的需要来完成一项工作。 如果有人对成功完成此操作的人员有任何引用,请在此处添加。 干杯, 问题答案: 使用钩子,您不再需要该函数的回调。现在,您可以使用挂钩设置状态,并监听其值以使用挂钩更新。挂钩的可选第二个参数采用一组值来侦

  • 我有一个小的井字游戏,一切都很好,除了我正在努力寻找在代码中放置完成功能的位置。让我给你看; 这基本上是整个游戏,我在另一个文件中有一个整理函数,就像这样; 完成功能也可以正常工作,但是由于useState是异步工作的,我知道这一点,我正在努力把它放在哪里。如果我把点击功能放在里面,它就不能对新的状态做出反应,只能对之前的状态做出反应。如果我把外面加上只是if语句,它会说渲染太多,因为我正在设置获

  • 我正在尝试使用状态将一个表单输入值复制到另一个表单输入值,但状态没有更新 我创建了一个带有按钮的表单,其中左侧表单输入的值应复制到右侧表单输入。这是我的代码: 无论我做什么,dbSecName的状态都不会改变。我试着设置一个新的常量。我尝试使onclick函数异步并等待。如果我为我试图设置的变量的值添加,我可以正确地看到它,但是dbSecName的console.log总是显示原始值。 我真的不知