【发布时间】:2021-09-09 07:36:27
【问题描述】:
我有一种方法可以拯救员工。在这里,我想用返回的保存对象设置员工状态。它正在更新状态值,但在 setEmployee() 之后不显示下一行日志。但它显示 员工变动时 useEffect() 的更新值。那么为什么在下一行设置值后它没有显示,虽然我已经使用了等待。
我的代码如下:
初始状态,空对象>>
const [employee, setEmployee] = useState({});
对员工的使用效果>>
useEffect(() => {
console.log(">>>> inEmpolyeeUseEffect: " + employee);
}, [employee]);
添加员工方法>>
const addEmployee = async (empObj) => {
try {
const response = await axios.post(`http://localhost:9000/employee/save`, { ...empObj });
const data = response.data;
await setEmployee(JSON.stringify(data));
console.log("EmployeeDataAfterSave: " + employee); // log empty object here like {}
...
} catch (error) {
console.log(error +" :: " + JSON.stringify(error));
}
}
【问题讨论】:
-
setState是async操作,设置后无法立即读取更新值。这就是为什么提供useEffect的原因,它在后台值发生更改时执行。 -
关于 React 中的状态更新,您需要了解两件事: 1. 在组件的特定渲染中,状态是恒定的;组件无法看到更新的状态直到它重新呈现。 2. 状态更新是异步的。
标签: reactjs react-hooks setstate