在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 相关文章推荐
Prototype Number对象 学习
Jul 19 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
js操作label给label赋值及取label的值示例
Nov 07 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
Immutable 在 JavaScript 中的应用
May 02 Javascript
Node.js读写文件之批量替换图片的实现方法
Sep 07 Javascript
jQuery实现判断控件是否显示的方法
Jan 11 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 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采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
网络工程师职业规划
2014/02/10 职场文书
鉴定评语大全
2014/05/05 职场文书
无传销社区工作方案
2014/05/13 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
初三数学教学反思
2016/02/17 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers