复活的useCode钩子无法按预期工作

时间:2020-06-10 20:13:52

标签: react-native react-native-reanimated

我正在应用中使用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执行redash函数时,useCode又被执行了,我真的不知道为什么会这样,因为我为visible道具使用deps,这是来自父组件的属性,用于显示或隐藏模态。 useCode部门存在很多问题,因为它无法按我预期的那样工作。有人可以帮助我,或者解释useCode是否运作良好?

0 个答案:

没有答案