在react项目中使用antd的form组件,动态设置input框的值


Posted in Javascript onOctober 24, 2020

问题:

创建账号时,输入账号后不搜索直接保存,提示查询后,再点搜索就不能搜索这个账号了

在react项目中使用antd的form组件,动态设置input框的值

原因:

点击保存之后,对表单进行了验证,导致之后请求的数据无法在更新到input框中,也就是说即使在state中有值,也不会更新initialValue值,就导致搜索后的值不能正确填入input中,表单也就提交不了。

解决办法:

不使用initialValue设置动态更新的值,而是使用 this.props.form.setFieldValue({name:data}); 用于动态更新值,就可以解决了。

if (result.code===0) {
 if (result.data) {
  this.props.form.setFieldsValue({name:result.data});
 }
}

ps:

还有一个问题,如果输入了账号进行搜索后匹配了name,也填入了input框中。但是又修改了账号,然后直接提交,就会导致账号和name不匹配,也就是name是存在的,但就不是对应的账号了。会导致保存之后,如果正确的账号和name已经存在,数据库出现数据存储问题。

解决:

给账号输入的Input框添加onChange事件,来触发如果有改变就清空name框,防止错误提交

change = (event) => {
 this.props.form.setFieldsValue({name:''});
}

记录一下

补充知识:重新封装Antd Input组件,解决中文输入问题

我就废话不多说了,大家还是直接看代码吧~

import React, { useState, useEffect } from 'react'
import { Input } from 'antd'
function BaseHOC(key) {
 return function(props) {
 const { defaultValue, value, onChange } = props
 const hasValue = props.hasOwnProperty('value')
 // 用户切换到底是显示 value 还是 input
 // 不能直接用 isOnComposition 原因是,这个值发生变化不会触发重新渲染
 // 不能只使用 flag 原因是,setFlag 是异步的
 const [flag, setFlag] = useState(false)
 // 非中文输入时候显示 value。中文输入的时候显示 input
 const [input, setInput] = useState(hasValue ? value : defaultValue)
 useEffect(
 function() {
 if (hasValue && input !== value) {
  setInput(value)
 }
 },
 [value]
 )
 let isOnComposition = false
 function handleChange(e) {
 setInput(e.target.value)
 if (isOnComposition) return
 onChange && onChange(e)
 }
 function handleComposition(e) {
 if ('compositionend' === e.type) {
 isOnComposition = false
 handleChange(e)
 } else {
 isOnComposition = true
 }
 if (flag !== isOnComposition) {
 setFlag(isOnComposition)
 }
 }
 let Component = Input
 if (key) {
 Component = Input[key]
 }
 return (
 <Component
 {...props}
 value={hasValue && !flag ? value : input}
 onCompositionStart={handleComposition}
 onCompositionUpdate={handleComposition}
 onCompositionEnd={handleComposition}
 onChange={handleChange}
 />
 )
 }
}

const Component = function(props) {
 return BaseHOC()(props)
}

Component.Search = function(props) {
 return BaseHOC('Search')(props)
}

Component.TextArea = function(props) {
 return BaseHOC('TextArea')(props)
}

Component.Password = Input.Password
Component.Group = Input.Group
export default Component

以上这篇在react项目中使用antd的form组件,动态设置input框的值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
载入进度条 效果
Jul 08 Javascript
js调用flash的效果代码
Apr 26 Javascript
面向对象的Javascript之一(初识Javascript)
Jan 20 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
js继承实现方法详解
Dec 16 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
vue watch关于对象内的属性监听
Apr 22 Javascript
javascript简单实现深浅拷贝过程详解
Oct 08 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
Vue-Ant Design Vue-普通及自定义校验实例
Oct 24 #Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 #Javascript
解决vue项目axios每次请求session不一致的问题
Oct 24 #Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 #Javascript
vue中是怎样监听数组变化的
Oct 24 #Javascript
JSON stringify方法原理及实例解析
Oct 23 #Javascript
vue中使用腾讯云Im的示例
Oct 23 #Javascript
You might like
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
用PHP实现维护文件代码
2007/06/14 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
python实现在windows下操作word的方法
2015/04/28 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python应用库大全总结
2018/05/30 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
护士自荐信
2013/10/25 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
美容院合作经营协议书
2014/10/10 职场文书
食堂管理制度范本
2015/08/04 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
浅谈Python数学建模之线性规划
2021/06/23 Python