如何在动画值超过 .8 后触发函数并将当前状态传递给该函数(不是旧状态)
How to trigger a function once the animated value is over .8 and pass in the current state to that function(not old state)
一旦 reactAnimated 值超过 .8
,我将尝试触发这个名为 moveNow()
的函数。我目前正在使用 addListner()
执行此操作,并且每当我的 useContext 中名为 DATA_LAYER.names
的列表发生更改时,我都会添加一个侦听器。问题是过去使用旧版本 DATA_LAYER.names
的侦听器在值超过 .8 时仍然会被触发。基本上,当 reactAnimated 值超过 .8 时,我不想转到下一个屏幕,但如果名称列表不为空,我也只想转到另一个屏幕。 但是,如果我添加一个名称然后删除并使 reactAnimated 值超过 .8,它仍然会转到另一个屏幕,因为名称有名称时的旧侦听器仍然存在。
const DATA_LAYER = React.useContext(DataLayerContext);
const reactAnimated = React.useRef(new Animated.Value(0)).current;
/*
Some simple functions to move the reactAnimated value
*/
const moveNow = () =>{
if (DATA_LAYER.names.length!==0){
props.navigation.navigate("loadingscreen");
}
}
React.useEffect(()=>{
// Animated values
reactAnimated.addListener(val=>{
if (val["value"]>.8){
moveNow() // move to next page
}
});
},[DATA_LAYER.names])
您可以在 useEffect
return 函数中清除侦听器。
React.useEffect(()=>{
// Animated values
reactAnimated.addListener(val=>{
if (val["value"]>.8){
moveNow() // move to next page
}
});
return () => reactAnimated.removeAllListeners()
},[DATA_LAYER.names])
一旦 reactAnimated 值超过 .8
,我将尝试触发这个名为 moveNow()
的函数。我目前正在使用 addListner()
执行此操作,并且每当我的 useContext 中名为 DATA_LAYER.names
的列表发生更改时,我都会添加一个侦听器。问题是过去使用旧版本 DATA_LAYER.names
的侦听器在值超过 .8 时仍然会被触发。基本上,当 reactAnimated 值超过 .8 时,我不想转到下一个屏幕,但如果名称列表不为空,我也只想转到另一个屏幕。 但是,如果我添加一个名称然后删除并使 reactAnimated 值超过 .8,它仍然会转到另一个屏幕,因为名称有名称时的旧侦听器仍然存在。
const DATA_LAYER = React.useContext(DataLayerContext);
const reactAnimated = React.useRef(new Animated.Value(0)).current;
/*
Some simple functions to move the reactAnimated value
*/
const moveNow = () =>{
if (DATA_LAYER.names.length!==0){
props.navigation.navigate("loadingscreen");
}
}
React.useEffect(()=>{
// Animated values
reactAnimated.addListener(val=>{
if (val["value"]>.8){
moveNow() // move to next page
}
});
},[DATA_LAYER.names])
您可以在 useEffect
return 函数中清除侦听器。
React.useEffect(()=>{
// Animated values
reactAnimated.addListener(val=>{
if (val["value"]>.8){
moveNow() // move to next page
}
});
return () => reactAnimated.removeAllListeners()
},[DATA_LAYER.names])