在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 oop开发滑动(slide)菜单控件
Aug 25 Javascript
jQuery实现可收缩展开的级联菜单实例代码
Nov 27 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
JS交换变量的方法
Jan 21 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
Feb 26 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
js对象简介与基本用法示例
Mar 13 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 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
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Django接受前端数据的几种方法总结
2016/11/04 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
大学社团活动总结
2014/04/26 职场文书
论文诚信承诺书
2014/05/23 职场文书
社会工作专业求职信
2014/07/15 职场文书
求职信范文怎么写
2015/03/19 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
护理自荐信
2019/05/14 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
Docker部署Mysql8的实现步骤
2022/07/07 Servers