在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 相关文章推荐
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
Sep 25 Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
Sep 01 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
js实现上传图片并显示图片名称
Dec 18 Javascript
JavaScript中跨域问题的深入理解
Mar 04 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
stripos函数知识点实例分享
2019/02/11 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
详解Python中的type()方法的使用
2015/05/21 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Django对models里的objects的使用详解
2019/08/17 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
什么是TCP/IP
2014/07/27 面试题
金士达面试非笔试
2012/03/14 面试题
机电职业生涯规划书范文
2014/03/08 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
村党建工作汇报材料
2014/11/02 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书