在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中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
jQueryUI的Dialog的简单封装
Jun 07 Javascript
基于JQuery的日期联动实现代码
Feb 24 Javascript
jquery 插件学习(一)
Aug 06 Javascript
自己封装的常用javascript函数分享
Jan 07 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
如何用JS实现网页瀑布流布局
Apr 24 Javascript
浅谈JavaScript作用域
Dec 06 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伪静态失效
2014/06/09 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
python迭代器常见用法实例分析
2019/11/22 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
公司经理任命书
2014/06/05 职场文书
教师考核评语大全
2014/12/31 职场文书
离婚协议书的范本
2015/01/27 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL