Antd Form onFinish 提交时 setState 非批量执行(batch update)

Antd Form onFinish 提交时 setState 非批量执行(batch update)

参考 issue
复现示例
在这里插入图片描述

import React, { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';
import 'antd/dist/antd.css';
import './index.css';
import { Button, Form } from 'antd';

const useSearch = () => {
  const [current, setCurrent] = useState(0);
  const [page, setPage] = useState(0);

  useEffect(() => {
    console.log('current=', current);
    console.log('page=', page);
  }, [current, page]);

  const handleClick = () => {
    console.log('=============');
    setCurrent(current + 1);
    console.log('1');
    setPage(page + 1);
    console.log('2');
  };

  return { handleClick };
};

const Demo = () => {
  const { handleClick } = useSearch();
  return (
    <Form onFinish={handleClick}>
      <Form.Item>
        <p>
          <Button type="primary" htmlType="submit">
            非批量更新
          </Button>
        </p>
        <p>
          <Button type="primary" onClick={handleClick}>
            批量更新
          </Button>
        </p>
      </Form.Item>
    </Form>
  );
};

ReactDOM.render(<Demo />, document.getElementById('container'));

原因:onFinish 会引入其他微任务,react官方计划在18版本修复没有批量更新的问题
解法一:
仅用button的onClick即可避免
解法二:
使用 unstable_batchedUpdates 手动批量更新state

import { unstable_batchedUpdates } from "react-dom";

unstable_batchedUpdates(() => {
    setState_1(1);
    setState_2(2);
    setState_3(3);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值