1

react-native-reanimated在我的应用程序上使用。我也在用react-native-redash。我正在尝试使用一些手势制作模式,所以我有以下代码:

const [ height, setHeight ] = useState(SNAP_TOP);
const [ velocityY, translationY, offset, state ] = useValues(0, 0, height, State.UNDETERMINED);

const gestureHandler = onGestureEvent({
  state,
  velocityY,
  translationY,
});

const springTranslation = withSpring({
  state,
  offset,
  velocity: velocityY,
  value: translationY,
  config: { damping: 15 },
  snapPoints: [ SNAP_BOTTOM, height - HEADER_HEIGHT, height ],
  onSnap: () => {
    state.setValue(State.UNDETERMINED)
  },
});

const translateY = interpolate(springTranslation, {
  extrapolate: Extrapolate.CLAMP,
  inputRange: [ SNAP_BOTTOM, height ],
  outputRange: [ SNAP_BOTTOM, height ],
});

所以,这个手势很好用,但在某些特定时刻我需要显示或隐藏我的模态,所以我声明以下内容:

useCode(() => block([
  cond(
    eq(state, State.UNDETERMINED),
    [
      set(
        offset,
        timing({ clock, from: visible ? height : 0, to: visible ? 0 : height, duration: 400 })
      ),
    ],
  ),
]), [ visible ]);

这就是问题所在,当再次执行onSnap函数时,我真的不知道为什么会这样,因为我正在使用 deps for prop,这是来自父组件的属性,用于显示或隐藏模态的。我在使用deps 时遇到了很多问题,因为它没有按我的预期工作。有人可以帮助我,o解释一下是否工作得一样好?redashuseCodevisibleuseCodeuseCode

4

0 回答 0