我想用我保存在localStorage中的对象覆盖用户,但是它不起作用。
注意,该组件称为 Index ,因为我正在使用next.js
import React, { useState, useEffect } from 'react';
import { loadUser } from '../utils/user';
const Index = () => {
const [ user, setUser ] = useState({});
async function restore(){
const loadedUser = await loadUser();
console.log(loadedUser); // correct - {userId: 4124783261364}
setUser(loadedUser);
console.log(user); // was not updated - {}
};
useEffect(() => {
restore();
}, [0])
return (<></>);
};
export default Index;
答案 0 :(得分:1)
[]
)(不是[0]
),作为第二个参数。这告诉React,您的效果不依赖于道具或状态的任何值,因此它从不不需要重新运行。console.log(user);
不显示更新值的原因
setUser(loadedUser);
这摆脱了问题,因为您只需要一次从本地存储中加载用户。但是当 const restore = async () => {
const loadedUser = await loadUser();
console.log(loadedUser); // correct - {userId: 4124783261364}
setUser(loadedUser);
console.log(user); // user is not updated here, but will be
};
useEffect(() => {
restore();
}, []);
按时间返回更改结果,因此需要实时更新用户时,您应该使用 loadUser()
。
useCallback
答案 1 :(得分:-1)
尝试这样的事情:
// Assuming your loadUser() functions is set like the line below
const loadedUser = {userID: '513216351354'};
const Index = () => {
function restore(){
console.log("Loaded user is " + loadedUser.userID); // Loaded user is 513216351354
setUser(loadedUser.userID);
console.log("User is " + user); // User is 513216351354
};
useEffect(() => {
restore();
}, [])
return (<></>);
}
export default Index;