【发布时间】:2020-06-11 07:24:34
【问题描述】:
我对 ReactJS 完全陌生。请善待,我真的找不到我的问题的答案。
在 useEffect 中我更新了我的变量(它是一个对象数组),在我的 onClick 函数中我想再次更新我的变量。
因为 useEffect 在我创建 onClick 函数后运行,所以我的变量在 onClick 上仍然为空。我需要能够在我的 onClick 函数中访问我更新的变量。
如何在创建 onClick 函数之前先更新 useEffect 中的变量?
const [myvariable, setMyvariable] = useState([{}]);
useEffect({
setMyVariable([{
id: 1
}]);
}, []);
const onClick = () => {
// update my variable here
setMyVariable(prev => [...prev, {name: 'My name'} ]); // <-- Code here is probably not correct but you get the idea.
// prev is an empty object at this point since useEffect has not run yet
}
【问题讨论】:
-
你说的没有道理。
myVariable不是一个数组,它是一个对象。你的使用效果会立即设置为{id: 1}。您的变量在onClick函数中不是“仍然为空”,因为该函数调用setMyVariable并传递prev,它始终是最新的状态值。你在这里面临什么问题?是否有错误或您的应用程序以意想不到的方式执行?还是您只是担心onClick函数中的变量不正确? -
每次组件更新时都会重新创建您的 onClick 函数,并且每次状态更改时组件都会更新,因此您的 onClick 函数始终可以访问最新状态。
-
@JMadelaine 抱歉,我的代码没有完全按照我的情况进行 - 我现在进行了编辑,因为它是一个数组。我找到了变量似乎“仍然为空”的原因 - 当您在 onClick 中控制台记录变量时,变量为空,尽管如果您使用它或在 h1 标签中显示它,它是预期的值在 useEffect 中设置。
标签: reactjs use-effect use-state