antd将嵌套表单的对话框组件化,实现编辑功能

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南 本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。 阅读详情

问题

当使用对话框提交修改表单时,需要在输入框 Input 显示需要修改的数据,但使用 value 绑定对应数据,并未生效,具体代码如下:

function YwkclbEdit (props) {
	....
	const editData = props.data;
	....
}
<Form.Item
  name='hzxm'
  label='患者姓名'
>
  <Input placeholder="请输入患者姓名"
         value={editData.name} />
</Form.Item>

结果,在控制台输出数据时,可以发现 editData 是有对应数据的,但对话框却没有显示对应数据。
在这里插入图片描述

测试一

如果不是 Input 组件和数据的问题,那么应该是嵌套了 Form 表单引起的。

因此,单独测试下,将 Input 单独提取出表单外。

<Input placeholder="请输入患者ID" value={editData.name} />
<Form
  ref={ywkcEditForm}
  name='ywkcEditForm'
  size="small"
  {...layout}
>
  <Row justify="start" className="ywgllbAddFormItem">
    <Col span="24" key="a1">
      <Form.Item
        name='hzid'
        label='患者ID'
      >
        <Input placeholder="请输入患者ID" value={editData.name} />
      </Form.Item>
    </Col>
  </Row>

结果如下,的确是嵌套表单引起的。

在这里插入图片描述

重新回顾Form组件相关内容,发现:

被设置了 name 属性的 Form.Item 包装的控件,表单控件会自动添加 value(或 valuePropName 指定的其他属性) onChange(或 trigger 指定的其他属性),数据同步将被 Form 接管,这会导致以下结果:

1、你不再需要也不应该用 onChange 来做数据收集同步(你可以使用 Form 的 onValuesChange),但还是可以继续监听 onChange 事件。

2、你不能用控件的 value 或 defaultValue 等属性来设置表单域的值,默认值可以用 Form 里的 initialValues 来设置。注意 initialValues 不能被 setState 动态更新,你需要用 setFieldsValue 来更新。

3、你不应该用 setState,可以使用 form.setFieldsValue 来动态改变表单值。
在这里插入图片描述

测试二

从文档解释可以发现错误在于数据同步被Form接管,因此,要将需要同步的数据交给Form使用(ps.虽然有除去name属性的方法,但先且按文档说明使用):

function YwkclbEdit (props) {
  const ywkcEditForm = React.createRef();
  const editData = props.data;
  ywkcEditForm.current.setFieldsValue({  // 错误处
    hzid: editData.name
  })
  
  ...
  
  <Form
    ref={ywkcEditForm}
    name='ywkcEditForm'
    size="small"
    {...layout}
  >
    <Row justify="start" className="ywgllbAddFormItem">
      <Col span="24" key="a1">
        <Form.Item
          name='hzid'
          label='患者ID'
        >
          <Input placeholder="请输入患者ID"/>
        </Form.Item>
      </Col>
    </Row>

	...
}

想法很美好,现实很骨感,直接出现错误:

TypeError: Cannot read property ‘setFieldsValue’ of null

没有对应属性,容易发现是表单创建失败。

继续查看文档,由于我们使用的函数组件,对应表单数据交互应该使用

Form.useform

在这里插入图片描述

测试三

根据文档提示,合理使用,成功实现数据交互。

function YwkclbEdit (props) {
  const [ ywkcEditForm ] = Form.useForm(); // useForm() 返回的是表单数组,因此需要[]
  const editData = props.data;
  ywkcEditForm.setFieldsValue({
    hzid : editData.name,
 })
 
 ...
<Form
  form={ywkcEditForm}  // 修改处
  name='ywkcEditForm'
  size="small"
  {...layout}
>
  <Row justify="start" className="ywgllbAddFormItem">
    <Col span="24" key="a1">
      <Form.Item
        name='hzid'
        label='患者ID'
      >
        <Input placeholder="请输入患者ID"/>
      </Form.Item>
    </Col>
  </Row>
 
 ...
}

演示效果如下,但是却出现了

Warning: Instance created by useForm is not connected to any Form element. Forget to pass form prop?
Uncaught SyntaxError: Unexpected token ‘<’

在这里插入图片描述

测试四

详细查看文档小字部分,发现在 Modal 中调用 Form 时,因为Modal还初始化,导致 Form 实例没有绑定表单,根据文档给 Modal 添加forceRender 属性,可以解决该警告。

在这里插入图片描述
在为Modal添加了 forecRender 属性后,选择任意数据后,会发现如下警告:

Warning: Cannot update during an existing state transition (such as within render). Render methods should be a pure function of props and state.

报错是由于引用的子组件通过props进行传递,传递的过程中 Modal 实际上已经处于render阶段了 ,render 还没结束时将数据传入会触发state 改变,在这个阶段如果你再改变这个state值的话就会报这个错。因此,不要在render的时候改变state就可以解决问题。

考虑到父组件传入的数据为只读,又需要通过异步操作避免render时本地state变动的问题,要避免直接传入父组件数据来为本地state赋值,同时,考虑到多用户情况,列表数据可能已经被修改,应该采用axios请求服务器发送对应ID的数据,保证数据实时性,代码如下:

  // 子组件通过获取父组件传入的editId,向服务器申请对应数据并赋值
  const searchById = (id) => {
    console.log(id);
    Conn.getYwkcById(id)
      .then(res => {
        ywkcEditForm.setFieldsValue({hzid: res.hzid, ywmc: res.ywmc,ywpp: res.ywpp, ywsl: res.ywsl})
      })
      .catch((err) => {
        console.log(err);
      })
  };
  
  searchById(props.editId);

结果很成功,先前出现的警告消失了,而且数据也能顺利交互。

总结

测试到此告一段落了,关于React、antd如何将嵌套表单的对话框组件化、实现数据交互作出了实践测试。

另外,Antd的说明文档非常重要的,遇到问题往往可以先查看说明文档,只要找到了对应的错误,往往会有成熟的解决方案。

引用

https://www.cnblogs.com/banyouxia/p/13188698.html

https://blog.youkuaiyun.com/estherlxy/article/details/106145389

https://ant.design/components/modal-cn/

MATLAB 车牌识别系统 车牌识别系统利用计算机视觉和图像处理技术,自动识别车辆牌照上的字符信息。本系统基于 MATLAB 实现车牌识别,包括图像预处理、车牌定位、字符分割、字符识别等模块。车牌识别系统是实现智能交通和公共安全的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和系统开发。 阅读详情

相关推荐

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2683

Vue源码阅读(34):异步组件的源码解析

异步组件的官方文档点击这里。 借助于异步组件,我们可以将 Vue 项目按照组件分割成一些小的代码块,并且让这些代码块在前端需要时才从服务器进行加载。这种优化措施在大型应用中是很有必要的,可以大大缩短首次加载的时间。 在这里,建议读者先将 Vue 官网中的异步组件部分复习一遍,了解异步组件的写法。 1,异步组件的加载时机 首先说明一下异步组件触发加载的时间,异步组件的加载是在执行 render 函数创建vnode 的过程中,如果判断出当前创建 vnode 的组件是异步组件的话,则会执行 reso..

f18855666661的博客 739

别再折腾老教程了!树莓派4B/5最新系统(Raspberry Pi OS Bookworm)红外遥控配置,用gpio-ir驱动一次成功

本文详细介绍了树莓派4B/5在最新Raspberry Pi OS Bookworm系统下配置红外遥控的完整指南,摒弃过时的lirc-rpi驱动,采用现代gpio-ir驱动方案。从硬件连接到软件配置,提供10分钟快速上手指南,涵盖驱动加载、信号测试、按键映射及高级应用场景,帮助用户高效完成红外遥控配置。

weixin_42520909的博客 442

antd Modal中添加Form表单用ref获取数据,第一次打开取到的是null

Modal的 API中有一个强制渲染的属性 给Modal加上此属性即可。 forceRender={true} 第一次取就可以取到了,只是会把渲染的先隐藏起来,可能会浪费些渲染性能。

weixin_46264539的博客 2972

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误

本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。

weixin_29597551的博客 325

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 655

【antd】Instance created by `useForm` is not connected to any Form element.Forget to pass `form` prop?

Instance created by useForm is not connected to any Form element.Forget to pass form prop? 这个问题通常会在Modal里的Form种出现,这是因为在调用form.setFieldsValue(detail);时,form还未被关联到<Form>上 解决方法: 给modal组件添加forceRender属性,使其强制渲染 <Modal // .... forceRender >

mytac的博客 3028

Mamba实战:如何用Samba框架轻松搞定RGB-D显著性检测(附避坑指南)

本文提供了基于Samba框架进行RGB-D显著性目标检测的实战指南。详细解析了从环境配置、数据预处理到模型推理与可视化的全流程,并重点剖析了多模态数据融合中的常见陷阱与调试技巧,旨在帮助开发者高效部署这一基于Mamba的先进视觉模型,规避工程实践中的典型问题。

dapp9builder的博客 615

在前端开发框架中forceRender属性 和 destroyOnClose属性的区别和作用

forceRender 和 destroyOnClose 通常在前端开发框架里使用,特别是和组件渲染以及生命周期管理相关的场景。

2403_89214657的博客 657

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2285

R语言机器学习算法实战系列(十一)MLP算法分类器 (Multi-Layer Perceptrons)

本文介绍了多层感知器(MLP)分类算法的原理和计算步骤,并通过R语言实现MLP模型。MLP是一种前馈神经网络,包含输入层、隐藏层和输出层,通过激活函数引入非线性,利用前向传播和反向传播进行训练。文章详细描述了数据预处理、数据切割、模型构建、预测和评估等步骤,并提供了乳腺癌数据集(BreastCancer_clean.csv)的下载链接。通过R包如neuralnet和caret,读者可以逐步实现MLP模型,并评估其分类性能。

专注生信领域 935

Vue3.0使用antd时,打开Modal框时无法获取里面的dom节点

问题:打开模态框之前,如果原本后台存有值需要,如何填写到编辑框里面? 测试方法1:在打开模态框的方法里面,获取dom节点然后innerHTML,比如 showModalList() { data.fxModel = true; document.getElementById("info")?.insertAdjacentHTML("afterbegin", props.fxValue); }, 报错document.getElementById(“info”)找不

CSND7997的博客 3647

基于YOLOv5s的RK3588多线程部署16FPS暴涨到120FPS 轻量化深度学习部署实战教程(包括性能优化与加速)37

本文介绍了如何在RK3588平台上利用线程池优化YOLOv5模型的推理性能。RK3588内置3个NPU核心,支持多核并行处理。作者设计了一个线程池架构:1个线程负责数据读取,10个线程处理NPU运算,1个线程输出结果。该架构包含任务队列、线程管理和工作线程三个核心组件,通过合理设置线程数、任务队列大小等参数确保性能稳定。文章提供了详细的C++实现代码,包括线程池初始化、任务提交、结果获取等功能模块,并讨论了多线程同步和内存管理的关键技术要点。该方案可显著提升深度学习模型在嵌入式设备上的部署效率。

FJN110的博客 9230

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

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

从事前端,不断积累经验,学习新的技术。头像不是本人是莉莉崽(美貌、可爱集于一身的小姐姐,小仙女),一个宝藏博主,值得喜欢! 2523

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Dialog组件

这可以提高性能,避免不必要的渲染。需要注意的是,如果对话框内部包含有动态内容或受到其他因素影响的组件,可能需要将 forceRender 设置为 true,以确保内容正常渲染和更新。3.当不需要上边的title栏的时候,noHeader 或者加上 header="",需要的时候则加上header={},并且{}里可以写<div>等标签,如上所示。8.destroyOnClose :这个属性就是说在Dialog关闭的时候可以把元素清除,下次打开的时候重新渲染,那样表单填的数据就也会被清空掉。

qq_56918166的博客 198

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【React】《React 学习手册 (第2版) 》笔记-Chapter7-使用钩子增强组件

多数情况下,你需要的是 useEffect,但是如果要实现的效果对浏览器绘制很重要(屏幕上 UI 元素的外观或位置),那就要使用 useLayoutEffect。由于每次渲染都新声明一个数组,因此在 JavaScript 看来,words 是有变化的,所以每次都会调用“fresh render”效应。调用钩子后,React 在一个数组中保存钩子的值,以便跟踪值。新值,新渲染,新效应。我们知道,渲染始终发生在 useEffect 之前,渲染在前,然后各个效应按顺序运行,而且效应可以访问渲染后所有值。

江湖人称菠萝包 920

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

antd design(4.x)中的Form编辑表单

antd 3.x 版本升级到 antd 4.x 版本存在兼容 移除废弃的 API 移除了 Modal.xxx 的 iconType 属性,请使用 icon 替代。 移除了 Form.create 方法,form 现可由 Form.useForm 获取。 移除了 Form.Item 的 id 属性,请使用 htmlFor 替代。 需求:从用户列表页面进入编辑页 通过ID查到用户信息,回填表单 (1) 跳转页面 render: (text, record, index) => ( <div&

waillyer的博客 3086

Antd实现弹框编辑表单功能

问题: 在使用Antd实现表单的编辑功能时,我们需要将数据回显到弹窗中的表单 例如: 但是当我们使用Antd的表单时会发现一下问题: 1.当使用initialValue只能显示一开始选择的值,无法更改。也就是当我们第一次选择时,能正常显示,但是当我们接着去选择其他数据时,还是回显第一次选择的数据。 2.当使用最小控件的value,解决了第一点问题。但是当表单提交时,后端无法辨别表单项,从而无法更改。 解决方法: 还是使用initialValue,但是在Modal中增加destroyOnClose={tru

weixin_43896829的博客 3249

react+AntDesign Form表单编辑进行回显

class Information extends React.Component{ formRef = React.createRef() // 第一步 constructor(props) { super(props); this.state = { name:'', bundleId: '' }; this.getEditData(); } // 获取APP列表信息 getEditData(){ this.formR

weixin_43609391的博客 3673

antdPro中EditableProTable可编辑表单编辑行配置可变下拉框选项和赋值其他字段

EditableProTable根据上一个下拉框选择的人物来进行对后一个下拉框选项进行变更,并在选中某个人后通过接口对后面的两个字段进行赋值,一开始是准备在onChange中改变下拉框中的options配置,colums中的renderFormItem来自定义字段,并且在点击单位名称的时候来通过useMemo进行对负责人下拉选项的重新渲染,和在负责人中获取整个表单数据并且进行重新替换赋值。但是不同字段赋值是可以在columns中通过onChange中的hooks来进行双向绑定进行赋值。

KisJLLLLLL的博客 2567

form的编辑与展示的切换(输入框,单选多选框,上传图片,颜色选择器)适用个人信息的展示与修改

form的编辑与展示的切换。上传图片(用于展示头像)编辑时每次仅只能上传一张图片,上传完成后回显且隐藏上传框,删除图片后显示上传框。可对图片进行预览,判断上传文件的类型与大小。

TangJing_的博客 1114

antd中的嵌套表格使用

开发antd的嵌套表格功能, 因为对antd不熟练,一顿乱操作,一天下去了, 终于好了,说回正题,要实现一个嵌套表格功能,被嵌套的表格内容随着所在的主表格动态显示,说一下遇到的几个问题, 1,dataSource={data},data必须为数组,形如[{key:value}],所以先把要展示的数据存放在对象{ }中,再把数据存放在数组中,最后绑定dataSource; 2,dataSource中...

bruce_zhen的博客 5469

antd 表单动态添加表单项编辑回显数据

在做一些后台管理会用到很多的表单,比如动态项表单,如下图这样的 话不多说,上代码 /* * 创建修改版本 */ import React from "react"; import { Form, Notification, Button, Input, Row, Col, Select, Radio, Icon } from "antd"; import Request from "@utils/request"; import Storage from "store2"; import ".

卡卡罗特的博客 8950

react antd第一次调用 ref 的 From 为空解决

react项目开发中,使用antd组件库在使用Modal组件嵌套From表单,点击触发showModal展示并将数据回显。第一次点击时提示绑定的ref获取的dom为空需要点击第二次才能获取到dom并回显数据。

qq_50541792的博客 1203

Ant 的弹框+表单,动态更新表单字段值

Ant 的弹框+表单,动态更新表单字段值。当表格每行数据查看或编辑时,弹框里面表单呈现对应行的数据。使用方法:form.setFieldsValue( );是 Ant Design 的 Form 组件提供的一个方法,用于动态地设置表单字段的值。

qq_53911056的博客 1103

vue源码分析-组件

我们知道,组件是Vue体系的核心,熟练使用组件是掌握Vue进行开发的基础。上一节中,我们深入了解了Vue组件注册到使用渲染的完整流程。这一节我们会在上一节的基础上介绍组件的两个高级用法:异步组件和函数式组件。

yyzzabc123的博客 351
上一篇: 安装vscode后该注意哪些设置
下一篇: Mock如何利用正则匹配url上的params
eobeans
博客等级 码龄10年 1粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值