antd 给input设置值_在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 (

{...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框的值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 在react项目中使用antd的form组件,动态设置input框的值

本文地址: http://www.cppcns.com/wangluo/javascript/357603.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值