是否可以在 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);
},
});