对表单进行了双向绑定却`setFieldsValue`失败


标签: react, ant design组件

需求

管理后台,点击编辑对应的条目之后,弹出修改框,希望弹出框中预设条目中原来的值

enter description here

实现难点

对表单的输入框进行双向绑定之后使用setFieldsValue却只给了下面的赠送栏赋初始值,并且报错

Warning: Cannot use setFieldsValue until you use getFieldDecorator or getFieldProps to register it.

思路分析

  • 问题剖析:由于弹框中显示的项目是按条件渲染出来的,不同类型的条目有不同的编辑项,所以对于设置条件渲染的部分不能进行form双向绑定,不管是不是满足判断条件,都无法正常绑定
  • 思路转换:
    • 思路一:不改变setFieldsValue,从实现双向绑定的角度来实现

      • 满足条件才渲染dom,改成满足条件就隐藏,将需要隐藏的部分包裹在一个盒子里面,使用`display`来控制盒子的显隐。这样一来在加载页面的时候dom就是存在的,这样就可以进行双向绑定了。
    • 思路二:依然是条件渲染,但是在对表单中的值进行set的时候要分条件去处理,需要set哪些才去处理

思路一的代码实现

1.原始代码

    • render()中的部分表单,这个FormItem的显示与否是由this.state.ruleType 的值来控制
      html<br />{console.log("this.state.ruleType "+this.state.ruleType)}<br />/*条件渲染/<br /> {this.state.ruleType === ‘CONSUMPTION‘ &amp;&amp; ( <br />
      {getFieldDecorator(‘ruleConsumptionType‘, {
      rules: customRules,
      // initialValue: this.state.ruleConsumptionType,
      })(<select "="">娃娃机按摩椅
      )}
      <br /> )}</li>
      </ul>
      ¨G0G

      javascript
      handleRowEditClick = async (index, record) => {
      console.log(record)
      const {
      ruleConsumptionType,
      ruleCount,
      } = record

      ¨K17K

      ¨G1G

      html

      ¨K2K

      注意事项

      1.setState是异步的,设置后直接取state的值需要再回调函数里面去取,但是页面上的state就已经是更新成对应的值了
      使用了setStatesetFieldsValue两种方式分别设置State和表当中名为ruleType输入框的值
      setState是异步的所以显示为空,而表单中的不是

      错误信息打印

      2.在FormItem被隐藏时,输入框可能为空,这个时候就要对校验字段进行筛选,确定在什么情况下需要交验哪些字段,否则会导致校验不通过不能够提交表单

      enter description here

      3.在写页面逻辑时用了很多的setStatesetFieldsValue适度选则,不要滥用,据说setState会影响页面性能,待商榷

      作者简介:饶尧,芦苇科技web前端开发工程师,擅长网站建设、微信公众号开发、微信小程序开发、小游戏制作、企业微信制作、H5建设,专注于前端框架、交互设计、图像绘制、数据分析等研究。

      欢迎和我们一起并肩作战: [email protected]
      访问 www.talkmoney.cn 了解更多

      提供专业的微信公众号建设,高质量的钉钉制作,高性价比的企业微信制作,广州微信小程序制作,靠谱的小游戏外包,深圳H5外包

原文地址:https://www.cnblogs.com/luwei-web/p/10167703.html

时间: 2024-10-04 08:32:37

对表单进行了双向绑定却`setFieldsValue`失败的相关文章

html表单-双向绑定

潜水多年.一直是只看不评不写多年,每每看到各位大牛分享的经典文章都是默默的收藏,对大牛技术分享技术表示感谢,这么多年从博客园学到了很多. 这段时间项目告一段落. 正好这段时间相对清闲,我也整理一些常用的内容与大家分享下. 从毕业到现在转眼间也有五年半了.一直从事企业管理软件开发.做过asp.net webform.做过silverlight.也做过asp.net mvc.对于企业管理软件,不管用什么技术展示,表单控件都是很重要的一个控件,今天就从表单控件--双向绑定说起吧!至于为什么需要双向绑定

vue之v-model表单输入双向绑定

vue的核心:声明式的指令和数据的双向绑定. 那么声明式的指令,已经给大家介绍完了.接下来我们来研究一下什么是数据的双向绑定? 另外,大家一定要知道vue的设计模式:MVVM M是Model的简写,V是View的简写,VM就是ViewModel. 单向绑定和双向绑定的区别: 单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新. 有单向绑定,就有双向绑定. 如果用户更新了View,Model的数据也自动被更新了,这种情况就是双向

第二章 Vue快速入门--13 讲解v-model实现表单元素的数据双向绑定

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <title>Document</title> 8

单和双向绑定使用场景

问题提出 https://www.zhihu.com/question/49964363 vue或者angular的介绍里说自己的特色是双向数据绑定,而在看react的介绍中,说自己的优势和特色是单向数据绑定. vue 和 angularjs支持双向绑定, 但是单向绑定是基本功能, 与react同基础. 那么什么情况下,使用单向绑定, 什么情况下使用双向绑定呢? 概念 https://www.cnblogs.com/Breaveleon/p/6680175.html 单向数据绑定:指的是我们先把

如何使用AngularJS对表单提交内容进行验证

AngularJS是一款优秀的前端JS框架,已经被用于Google的多款产品当中.它有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入等--使用它可以大大减少书写代码的工作量,但和Jquery不同,使用AngularJS有一定的难度,因此今天我将介绍以下怎样使用AngularJS来对表单的提交内容进行验证. AngularJS对表单中常用的验证操作 $dirty 表单有填写记录 $valid 字段内容合法的 $invalid 字段内容是非法的 $pristine

原生js实现数据双向绑定

最近接触了vue,在谈到vue等等的mvvm框架之前,先了解什么是数据双向绑定以及如何利用原生JS实现数据双向绑定 单向数据绑定 指先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里 缺点:一旦HTML代码生成就没有办法改变,如果有新数据重新传入,就必须重新把模板和数据整合到一起插入到文档流中 数据双向绑定 数据模型和视图之间的双向绑定,用户在视图上的修改会自动同步到数据模型中,同样的,如果数据模型中的值发生变化,也会同步到视图中去

AngularJS(2)——AngularJS数据双向绑定

双向绑定 AngularJS在$scope变量中使用脏值检测来实现了数据双向绑定. Scope作用: 1.通过数据共享连接Controller和View 2.事件的监听和响应 3.脏值检测和数据绑定 双向数据绑定最经常的应用场景就是表单了,这样当用户在前端页面完成输入后,不用任何操作,我们就已经拿到了用户的数据存放到数据模型中了.因为输入框中的ng-model和控制器中的数值实现了双向绑定,所以更改输入框的值或者更改控制器中的值,都会相应的更改双方的值.$scope对象,我们可以理解为NG框架中

AngularJS学习笔记(一) 关于MVVM和双向绑定

写在前面: 因为需要开始学习ng,之前在知乎上听大神们介绍ng的时候说这个坑如何的大,学了一阵(其实也就三天),感觉ng做的很大很全,在合适的情境你可以完全使用ng搞定一切.这一点从诸如jqLite之类的鸡肋就能看出来了.所以搞得ng很大.. 更主要的是,ng用一种和之前完全不同的思维方式去组织代码,它就是Model-View-ViewModel(MVVM). 这篇文章结构大概是1.MVVM和双向绑定 2.简单的购物金额计算的例子(转自miaov视频).如有问题还请看客斧正.^_^ 1.MVVM

谈谈对vue的认识2:双向绑定 v-model

1:v-model指令 数据的双向绑定 双向绑定是说我们不仅仅可以通过数据(M)的改变去影响视图(V),还是当视图的内容改变(V)去影响模型中的数据(M) 通常来说双绑定应用在表单中比较多 指令: vue对html元素拓展是一些属性名称(自定义属性名称) Vue指令有个特点,都是以v-开头的 V-model,它提供了一个js环境,在他的属性之中我们可以使用js(vue实例化对象)中的变量,将表单元素的值与vue实例化对象中是数据属性同步,实现视图到模型中的数据的一个绑定,因此在表单元素上添加了v