在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 相关文章推荐
jquery 上下滚动广告
Jun 17 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
Jul 30 Javascript
JavaScript 未结束的字符串常量常见解决方法
Jan 24 Javascript
JavaScript CSS 修改学习第四章 透明度设置
Feb 19 Javascript
javascript 保存文件到本地实现方法
Nov 29 Javascript
jQuery.extend()的实现方式详解及实例
Jun 29 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
windows下更新npm和node的方法
Nov 30 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
Vue3 实现双盒子定位Overlay的示例
Dec 22 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
推荐php模板技术[转]
2007/01/04 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php中Snoopy类用法实例
2015/06/19 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
Python如何使用字符打印照片
2020/01/03 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
String和StringBuffer的区别
2015/08/13 面试题
工程管理专业个人求职信范文
2013/12/07 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
公司投资建议书
2014/05/16 职场文书
家属慰问信
2015/02/14 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL