每次单击按钮,我都会调用此功能。
问题是,第一次单击按钮时,直到下次单击时,它才保存第一个元素 所以第一个元素永远不会被保存
const add=()=>{
if(website){
setInfo([...info,{website:website,password:generate()}])
localStorage.setItem("data",JSON.stringify(info));
}
}
状态信息:
const[info,setInfo]=useState([])
答案 0 :(得分:2)
setInfo
函数将异步更新状态,因此当您调用localStorage.setItem
函数并传递info
时,info
数组尚未更新。
您可以创建一个数组并将其传递给setInfo
和setItem
函数。这样,在将状态保存到setInfo
localStorage
函数来更新状态。
const add = () => {
if(website){
const arr = [...info,{website:website,password:generate()}]
setInfo(arr);
localStorage.setItem("data",JSON.stringify(arr));
}
}
答案 1 :(得分:1)
setInfo更改将在下一个渲染中可用。您应该在单独的变量中计算值,然后进行设置。
const add=()=>{
if(website){
let value = [...info,{website:website,password:generate()}];
setInfo(value)
localStorage.setItem("data",JSON.stringify(value));
}
}
答案 2 :(得分:0)
setInfo
,即setState
是异步的。您需要为此使用useEffect。
useEffect(() => {
localStorage.setItem('state', JSON.stringify(info));
}, [info]); // run whenever info is changed
每次更改状态info
时,都会进入useEffect
块并更新本地存储。