const [data, setData] = useState({time: new Date()});
// 这时候有个点击事件被触发 handleClick() 调用如下
const handleClick = () => {
setData({time: new Date()});
};
// 上面的点击事件调用完毕之后,我点击另外一个按钮,想要获取data信息
const getData = ()=>{
console.log(data); // 这时候永远是上一次更新的数据,永远不是最新的 (因为setData是异步的更新)
}
// 这里是ant 的 form
import {Form} from "antd";
const [form] = Form.useForm();
console.log(form.getFieldsValue()); // 为什么调用getFieldsValue永远可以拿到最新的值
//
// 有个疑问 : 为什么form.getFieldsValue()永远可以拿到最新值
当你执行useState返回的setData的时候,并没有立即执行更新,而是把更新任务加入到了队列,在后续进入对应任务调度才执行,所以你这时候拿到data都是未更新前的;
而Form他内部自己创建了一个store每次更新form表单数据的时候会及时同步store数据,所以你能拿到最新的