【问题标题】:React native reanimated runOnJs - does not update state every timeReact native reanimated runOnJs - 每次都不会更新状态
【发布时间】:2021-12-31 12:29:49
【问题描述】:

我有一个项目列表,当它们被刷过某个阈值时应该改变状态。我正在使用 runOnJs 调用函数来更改状态。现在,当我第一次滑动一个项目时,它会更新它的状态,但之后的每次滑动都不会执行任何操作。有人可以向我解释一下我在这里缺少什么吗?

let [cleaned, setCleaned] = useState(false);

let handleCleanPress = () => {
    console.log(clean);
    setCleaned(!cleaned);
    translateX.value = withTiming(0);
  };

let panGesture = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>({
    onStart: (_, context) => {
      context.startX = translateX.value;
    },
    onActive: (event, context) => {
      let start = context.startX + event.translationX;
      if (start < 0) {
        translateX.value = start;
      }
    },
    onEnd: () => {
      let shouldTriggerClean = translateX.value < translateXThreshold;
      translateX.value =
        translateX.value >= snapThreshold && translateX.value < -BUTTON_WIDTH
          ? withTiming(snapPoint, { duration: 200 })
          : withTiming(0, { duration: 200 });

      if (shouldTriggerClean) {
        runOnJS(handleCleanPress)();
      }
    },
  });

【问题讨论】:

    标签: react-native react-native-reanimated-v2


    【解决方案1】:

    这样做感觉有点不对,但它确实有效。也许有人可以提出更好的方法或确认这是正确的?

      let setCleanState = () => {
        setCleaned(!cleaned);
      };
    
      let handleCleanPress = () => {
        translateX.value = withTiming(0, { duration: 200 }, (finished) => {
          if (finished) {
            runOnJS(setCleanState)();
          }
        });
      };
    

    【讨论】:

    • 也不可靠。仍然欢迎提出建议。
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2019-04-18
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多