首页 > 其他分享 >关于antd Input 的defaultValue无法重新渲染的问题

关于antd Input 的defaultValue无法重新渲染的问题

时间:2023-09-07 10:13:17浏览次数:32  
标签:渲染 defaultValue js Input 组件 antd forceUpdate

最近在开发一个功能,table里面的Input组件。需要单行能够编辑,又要多行一起编辑,如下。

 

 在这种情况下,就只能对Input组件使用value受控,而不能使用defaultValue受控。因为defaultValue受控在批量编辑的时候无效。

现在遇到的问题是,使用value受控,在onChange的时候输入框会有非常明显的卡顿,大概两三秒,甚至无法输入中文,这是不可接受的。究其原因还是以前的人代码写的太烂,model里的state构建的不合理,非常臃肿,嵌套的层级太深,表格的list竟然在第二层。在reducers里面setValue会导致非常大的一个js运算处理消耗。每按一下键盘就会导致js重新运算一次。所以才会出现上面的状况。

测了一下从点击批量设置弹框,到批量设置完成的js运行时间

 js运算需要7秒钟,不卡才怪。

 

处理方法:

1. 在批量设置完后,使用this.forceUpdate强制渲染,不行。

问GPT的答案:

this.forceUpdate() 方法是 React 组件的一个方法,用于强制重新渲染组件。但是,this.forceUpdate() 方法只会重新渲染组件的 render() 方法,而不会重新渲染组件的子组件。

Ant Design 的 Input 组件的 defaultValue 是通过组件的属性传递的,只有在组件的初始渲染时生效。一旦组件初始渲染完成,并且 defaultValue 属性没有发生变化,this.forceUpdate() 方法也无法使输入框重新渲染为新的初始值。

2. 加一个布尔值控制table组件,强制让它渲染

 

这样处理后发现意外丝滑,丝毫感受不到table被切换了。

 

标签:渲染,defaultValue,js,Input,组件,antd,forceUpdate
From: https://www.cnblogs.com/yaoyu7/p/17684059.html

相关文章

  • kingbase参数ora_input_emptystr_isnull
    KingbaseES为了兼容Oracle,增加了参数ora_input_emptystr_isnull,用于控制''和null的比较。参数说明:#settheinput_emptystr_isnull'sdefaultvalues,validvaluesaretrue(on)orfalse(off)#true(on):oraclestyle.theemptystringasNULL#whentheinputstringis......
  • antd限制开始时间与结束时间范围是30天,并不能选择当前日期之后的日期 vue3(默认展示近7
    <a-range-picker:value="hackValue||dateArr":disabled-date="disabledDate"style="width:240px"separator="~":allow-cl......
  • input 禁止输入中文
    推荐直接使用正则,简单!也可以写个方法校验//1.正则匹配<inputtype="text"id="tel_id"onkeyup="value=value.replace(/[\u4e00-\u9fa5]/ig,'')"/>//2.方法校验//onpaste元素上粘贴文本时执行//ondragenter当用户拖动某控件到当前控件上面后触发<inputonpast......
  • antd的一个bug
    1、 菜单长成这样 事实上我们要菜单这样 目前antd实现不了,很不友好的东西 ......
  • InputSystem学习记录
    安装概念一、创建InputActionsInputActions概念及结构关系在我们InputSystem中所用到结构关系为InputSystem=>InputActions=>ActionMaps=>ActionsActionMaps(表)简单来说我们可以将InputActions视为我们项目里其中一个控制器的输入操作管理集,而ActionMaps则为该控......
  • 前端项目实战叁佰伍拾react-admin和material ui-ReferenceInput的用法
    import{Edit,SimpleForm,TextInput,ReferenceInput}from'react-admin';constContactEdit=()=>(<Edit><SimpleForm><TextInputsource="first_name"/><TextInputsource......
  • 解决antd Form的onChange方法改变的值与getFieldsValue获取的值不同步的问题
    项目场景:我想用antd写一个动态添加表单的Input框的功能,并且自动计算Input中的值,所以需要实时获取表单的数据。问题描述在onChange时使用form.getFieldsValue()方法获取的表单值是上次改变的值,与当前onChange改变的值不一致。这个时候我就在网上找解决方法。有的说可以在onChange......
  • HTML: input file
    <input> elementswith type="file" lettheuserchooseoneormorefilesfromtheirdevicestorage.Oncechosen,thefilescanbeuploadedtoaserverusing formsubmission,ormanipulatedusingJavaScriptcodeand theFileAPI. ......
  • input的change事件根据placeholder计算公式计算结果
    1//change事件,根据公式计算2constchangeField=(field,data)=>{3//change事件计算公式徐文龙2023-08-17晚4letspecialChars=/[-+*/)(]/;//正则5for(leti=0;i<person.kpiList.length;i++){6constelement=person.kpiList[......
  • el-input出发回车事件时会导致页面刷新
    原因分析:当表单只有一个文本框时,按下回车将会触发表单的提交事件,导致页面的刷新。1:el-input上使用回车事件<el-inputv-model="input"@keyup.enter.native="search1">解决方法一:在el-form表单加上@submit.native.prevent<[email protected]><el-inputv-......