在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空间与分页函数
Sep 02 Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 Javascript
中文字符串截取的js函数代码
Apr 17 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
JavaScript浏览器对象之一Window对象详解
Jun 03 Javascript
在线引用最新jquery文件的实现方法
Aug 26 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
Sep 11 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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/04/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
jsonp原理及使用
2013/10/28 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Python简明入门教程
2015/08/04 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
python正则表达式面试题解答
2020/04/28 Python
python书籍信息爬虫实例
2018/03/19 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
三个Unix的命令面试题
2015/04/12 面试题
物理教学随笔感言
2014/02/22 职场文书
学雷锋的心得体会
2014/09/04 职场文书