0

是否可以在 react-native-reanimated 2 中以某种方式在 UI 线程上调用 setTimeout?或者更好的是,使用 lodash 的油门?

现在调用 setTimeout 会导致尝试从不同的线程同步调用函数 {setTimeout}。

下面是我想要实现的简化代码。

      const handleSliderDrag = useAnimatedGestureHandler<PanGestureHandlerGestureEvent, { startX: number }>({
        onStart: (_, ctx) => {
          ctx.startX = x.value;
        },
    
        onActive: (event, ctx) => {
          x.value = ctx.startX + event.translationX;
    
          setTimeout(() => {
            console.log('hello from timeout');
          }, 200);
        },
      });

我需要在滑块拖动时更新 redux 状态,但是从 UI 到 JS 的调用是异步的,并且给定许多事件,调用很快就会堆积起来。

编辑 1

我使用 Date.now 作为一种解决方法,到目前为止工作正常,不知道它会如何适得其反。

  const handleSliderDrag = useAnimatedGestureHandler<PanGestureHandlerGestureEvent, { startX: number; now: number }>({
    onStart: (_, ctx) => {
      ctx.startX = x.value;
      ctx.now = Date.now();
    },

    onActive: (event, ctx) => {
      x.value = ctx.startX + event.translationX;
      const now = Date.now();

      if (now - ctx.now > 150) {
        ctx.now = now;
        runOnJS(setCurrent)(x.value);
      }
    },

    onEnd: (event, ctx) => {
      x.value = ctx.startX + event.translationX;
      runOnJS(setCurrent)(x.value);
    },
  });
4

0 回答 0