异步操作后如何更新共享值?

问题描述

const [action,setAction] = useState(true);
const sharedVal = useSharedValue(action ? 10 : 20)
useEffect(() => {
    setTimeout(() => {
        setAction(false)
    },2000)
},[])

在上面的代码中,shareVal 的值没有改变,action 的值改变了。在 sharedVal 之后更新 timeout 值的最佳方法是什么。

解决方法

action 发生变化时,您将不得不产生副作用。

useEffect(() => {
  
  sharedVal.value = action ? 10 : 20;

  // this will run when action is updated 
},[action]);

或者你可以随心所欲地sharedVal.value = someValue

documentation

(...) 引用是一个具有 .value 属性的对象,可以从工作集访问和修改,也可以直接从主 JS 线程更新。

,

试试这个方法

function Example() {
  const [action,setAction] = useState(true);

  React.useEffect(() => {
    async function useSharedValue(number) {
      const response = await fetch(....);
      const json = await response.json();
      setAction(true); // reset state here
    }

    useSharedValue(action ? 10 : 20);
  },[]);
}
,

我有一个和你类似的代码。每次警报变量发生变化时都会调用 UseEffect,正如您在下面的代码中看到的那样。如果第二个参数为空 [],则 useEffect 只会在页面加载时执行一次。由于每次操作变量的值发生变化时都想调用,因此只需将其放在 [] 中即可。

    useEffect(() => {
       if (alert != '') setTimeout(() => { setAlert('') },4000);
    },[alert]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...