在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 相关文章推荐
javascript 动态数据下的锚点错位问题解决方法
Dec 24 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
jquery获取tr中控件值并操作tr实现思路
Mar 27 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
JavaScript门面模式详解
Oct 19 Javascript
Javascript的this详解
Mar 23 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
javascript使用Blob对象实现的下载文件操作示例
Apr 18 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
用php解析html的实现代码
2011/08/08 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
浅谈python函数之作用域(python3.5)
2017/10/27 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
学生会干部自荐信
2014/02/04 职场文书
求职面试个人自我评价
2014/02/28 职场文书
詹天佑教学反思
2014/04/30 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
公司的力量观后感
2015/06/05 职场文书
初中生物教学反思
2016/02/20 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
nginx日志格式分析和修改
2022/04/28 Servers