在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 相关文章推荐
JQuery 学习笔记01 JQuery初接触
May 06 Javascript
解决jquery的datepicker的本地化以及Today问题
May 23 Javascript
js实现网站首页图片滚动显示
Feb 04 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
JS中FRAME的操作问题实例分析
Oct 21 Javascript
node.js中的path.delimiter方法使用说明
Dec 09 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
jQuery视差滚动效果网页实现方法经验总结
Sep 29 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 Javascript
vue下载excel的实现代码后台用post方法
May 10 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
原生js拖拽功能制作滑动条实例代码
Feb 05 Javascript
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
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python实现查询IP地址所在地
2015/03/29 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python处理“
2019/06/10 Python
python绘制直方图和密度图的实例
2019/07/08 Python
python小程序实现刷票功能详解
2019/07/17 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
电子银行营销方案
2014/02/22 职场文书
降消项目实施方案
2014/03/30 职场文书
运动员口号
2014/06/09 职场文书
2014年妇联工作总结
2014/11/21 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS