当前位置: 首页 > news >正文

react antd Modal里Form设置值不起作用

问题描述:

react antd Modal里Form设置值不起作用,即使用form的api。比如:编辑时带出原有的值。

造成的原因:一般设置值都是在声明周期里设置,比如:componentDidMounted里设置,hook则在useEffetc里设置,因为Form在Modal里,会造成 form还没渲染完,就已经设置完值的情况 即在调用form的实例时,Modal内部的组件并未渲染,才导致了该错误。

为何在 Modal 中调用 form 控制台会报错?

 这是因为你在调用 form 方法时,Modal 还未初始化导致 form 没有关联任何 Form 组件。你可以通过给 Modal 设置 forceRender 将其预渲染

 表单 Form - Ant Design

解决问题:

知道了原因那解决起来当然就好解决了。

方案一、给 Modal 设置 forceRender 将其预渲染:

const [form] = Form.useForm();useEffect(() => {form.setFieldsValue({ ...xxx })}, [])< Modal forceRender><Form form={form}/></Modal >

需要注意的是,当 forceRendertrue 时,Modal 组件会在第一次渲染时就会渲染子组件,这可能会导致一些组件的生命周期函数提前执行,从而产生一些不符合预期的结果。因此,在使用 forceRender 属性时,需要特别注意 Modal 中子组件的生命周期函数的执行顺序和时机。 总的来说,forceRender 属性可以在 Modal 渲染时立即渲染子组件,从而提高用户体验,但是也可能会对性能造成一定的影响。在使用时需要根据具体情况进行权衡和选择。  

方案二、使用定时器(最不推荐的)

定时器这个存在一些坑,因为你无法确认 渲染dom需要多久。如果超过设置得时长,就会无法赋值成功。

const [form] = Form.useForm();const formRef = useRef(null);useEffect(() => {setTimeout(()=>{form.setFieldsValue({ ...xxx })},500)}, [])< Modal><Form form={form} form={form}/></Modal >

总结:

我个人更倾向于方式一。

如果你出现了 Warning: Instance created by useForm is not connected to any Form element. Forget to pass form prop?的警告 可以看:Warning: Instance created by useForm is not connected to any Form element. Forget to pass form prop_崽崽的谷雨的博客-CSDN博客

http://www.lryc.cn/news/91628.html

相关文章:

  • idea连接Linux服务器
  • 在windows环境下使用winsw将jar包注册为服务(实现开机自启和配置日志输出模式)
  • 汽车通用款一键启动舒适进入拓展蓝牙4G网络手机控车系统
  • QSettings Class
  • 【vue】关于vue中的插槽
  • Springboot整合Mybatis Plus【超详细】
  • 接口测试-使用mock生产随机数据
  • Kohl‘s百货的EDI需求详解
  • 二叉树part6 | ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
  • Linux命令记录
  • eBPF 入门实践教程十五:使用 USDT 捕获用户态 Java GC 事件耗时
  • Linux :: vim 编辑器的初次体验:三种 vim 常用模式 及 使用:打开编辑、退出保存关闭vim
  • Linux内核进程创建流程
  • 【03.04】大数据教程--HTTP协议和静态Web服务器
  • 数据共享传输:台式机和笔记本同步文件!
  • java设计模式(十二)代理模式
  • Umi微前端水印踩坑以及解决方案
  • Android RK3588-12 hdmi-in Camera方式支持NV24格式
  • Hive窗口函数详细介绍
  • 牛客网【c语言练习】
  • C++类和对象(上)
  • JavaScript 数据透视表 DHTMLX Pivot Crack
  • QT链接库设置
  • 零点起飞学Android——期末考试课本复习重点
  • Redis为什么快?
  • Zabbix从入门到精通以及案例实操系列
  • 水声声波频率如何划分?水声功率放大器可将频率放大到20MHz吗?
  • 网络攻防技术--论文阅读--《基于自动数据分割和注意力LSTM-CNN的准周期时间序列异常检测》
  • C++ 学习 ::【基础篇:08】:C++ 中 struct 结构体的认识【面试考点:C 与 C++ 中结构体的区别】
  • Electron开发:打包和发布 Electron 应用