问题描述
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
。
(...) 引用是一个具有 .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]);