在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 相关文章推荐
Date对象格式化函数代码
Jul 17 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
jQuery对象与DOM对象转换方法详解
May 10 Javascript
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
JS设计模式之命令模式概念与用法分析
Feb 06 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
浅析php原型模式
2014/11/25 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
pandas 对group进行聚合的例子
2019/12/27 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
小学三年级学生评语
2014/04/22 职场文书
教师师德演讲稿
2014/05/06 职场文书
电话营销开场白
2015/05/29 职场文书
欧元符号 €
2022/02/17 杂记