React native 在“效果”方法中使用时,“效果”不起作用

React native 在“效果”方法中使用时,“效果”不起作用,react-native,react-hooks,hook,React Native,React Hooks,Hook,我正在尝试使用滚动效果,但效果不是很好 若要向下滚动持续时间,则效果有效 若要向上滚动,将忽略持续时间,它将立即滚动 <TouchableOpacity onPress={() => setStateMenu(!stateMenu)} activeOpacity={10} > ... </TouchableOpacity> const [stateMenu, setStateMenu] = useState(false);

我正在尝试使用滚动效果,但效果不是很好

若要向下滚动持续时间,则效果有效

若要向上滚动,将忽略持续时间,它将立即滚动

<TouchableOpacity
        onPress={() => setStateMenu(!stateMenu)}
        activeOpacity={10}
 >
...
</TouchableOpacity>


const [stateMenu, setStateMenu] = useState(false);
  const translateY = new Animated.Value(0);

  useEffect(() => {
    controlMenu();

  });

  function controlMenu() {
    if (!stateMenu) {//fechar Menu
      //alert('Fechando');
      Animated.timing(translateY, {
        toValue: 0,
        duration: 400,  
        useNativeDriver: true,
        //delay: 300,
      }).start();
    }
    else {//abrir Menu
      //alert('Abrindo');
      Animated.timing(translateY, {
        toValue: 800,
        duration: 400,
        useNativeDriver: true,
        //delay: 300,
      }).start();
    }
  }
setStateMenu(!stateMenu)}
activeOpacity={10}
>
...
常量[stateMenu,setStateMenu]=useState(false);
const translateY=新的动画值(0);
useffect(()=>{
控制菜单();
});
功能控制菜单(){
如果(!stateMenu){//fechar Menu
//警报(“Fechando”);
动画。计时(translateY{
toValue:0,
持续时间:400,
useNativeDriver:没错,
//延误:300,
}).start();
}
else{//abrir菜单
//警惕(“abindo”);
动画。计时(translateY{
toValue:800,
持续时间:400,
useNativeDriver:没错,
//延误:300,
}).start();
}
}
当stateMenu等于false时,滚动从0px到800px,这与持续时间有关,没错。 现在,当stateMenu为true时,滚动立即转到0px,而不是0.400秒。

试试这个

const [stateMenu, setStateMenu] = useState(false);
  const translateY = new Animated.Value(0);

  useEffect(() => {
    controlMenu();
  }, [stateMenu]); // listen changes in state menu

  function controlMenu() {
    if (!stateMenu) {//fechar Menu
      //alert('Fechando');
      Animated.timing(translateY, {
        toValue: 0,
        duration: 400,  
        useNativeDriver: true,
        //delay: 300,
      }).start();
    }
    else {//abrir Menu
      //alert('Abrindo');
      Animated.timing(translateY, {
        toValue: 800,
        duration: 400,
        useNativeDriver: true,
        //delay: 300,
      }).start();
    }
  }