我正在react-native应用中使用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
是否运作良好?