antd的form.getFieldsValue()为什么永远可以拿到最新值


    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()永远可以拿到最新值
阅读 6.5k
1 个回答

当你执行useState返回的setData的时候,并没有立即执行更新,而是把更新任务加入到了队列,在后续进入对应任务调度才执行,所以你这时候拿到data都是未更新前的;
而Form他内部自己创建了一个store每次更新form表单数据的时候会及时同步store数据,所以你能拿到最新的

推荐问题