undefined 不是试图在组件中使用 setTimeout 的对象(评估“fun.__callAsync”)

Posted

技术标签:

【中文标题】undefined 不是试图在组件中使用 setTimeout 的对象(评估“fun.__callAsync”)【英文标题】:undefined is not an object (evaluating 'fun.__callAsync') trying to use setTimeout in a component 【发布时间】:2021-12-19 11:13:23 【问题描述】:

我正在使用 React Native 和 Reanimated,我希望动画在 2 秒后播放。 当用户移动卡片时,卡片应在其新位置停留 2 秒,然后移回原位。 这就是我所拥有的:

  const panGesture = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(
onActive: event => 
  translateX.value = event.translationX;
  if (event.translationX <= 0) 
    // disabling swiping from right to left
    translateX.value = 0;
  
,
onEnd: event => 
  const shouldStick = translateX.value >= TRANSLATE_X_THRESHOULD;
  if (shouldStick) 
    translateX.value = withTiming(120);
    runOnJS(moveBack)(translateX);
   else 
    translateX.value = withTiming(0);
  
,
);

我尝试使用 setTimeOut 计算 2 秒,然后更新 translateX,但我收到此错误:

undefined is not an object (evaluating 'fun.__callAsync')

这是 moveBack 函数:

const moveBack = (translateX: Animated.SharedValue<number>) => 
console.log("TRANSLATEX: " + translateX);

setTimeout(() => 
  translateX.value = 0;
, 2000);

我什至没有看到TRANSLATEX 日志,所以我猜它甚至不会到达那里。 我真的不知道问题出在哪里,也不知道该怎么说,所以我可以找到解决方案。

【问题讨论】:

【参考方案1】:

解决方案比我想象的要容易得多。 我正在使用 Reanimated 2.2.0 并且有 withDelay 选项可以添加到动画中,效果很好。

这是我在translateX.value = withTiming(120); 之后添加的(而不是 runOnJs 行):

translateX.value = withDelay(2000, withTiming(0));

所以在将 translateX 设置为 120 之后,它会等待 2 秒,然后将值设置回 0。

【讨论】:

以上是关于undefined 不是试图在组件中使用 setTimeout 的对象(评估“fun.__callAsync”)的主要内容,如果未能解决你的问题,请参考以下文章

Magento javascript undefined不是函数jquery selectric?

React Router and this.props:this.props.location.state is undefined

undefined不是对象(评估'_effects.buffers.expanding')

undefined 不是一个函数('....data.map....' 附近)|React native

undefined在React Native中不是一个对象(评估'item.Title')。

为啥 getElementsByClassName 在 React 的功能组件中返回 undefined?