在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值
問題:
創(chuàng)建賬號(hào)時(shí),輸入賬號(hào)后不搜索直接保存,提示查詢后,再點(diǎn)搜索就不能搜索這個(gè)賬號(hào)了

原因:
點(diǎn)擊保存之后,對(duì)表單進(jìn)行了驗(yàn)證,導(dǎo)致之后請(qǐng)求的數(shù)據(jù)無法在更新到input框中,也就是說即使在state中有值,也不會(huì)更新initialValue值,就導(dǎo)致搜索后的值不能正確填入input中,表單也就提交不了。
解決辦法:
不使用initialValue設(shè)置動(dòng)態(tài)更新的值,而是使用 this.props.form.setFieldValue({name:data}); 用于動(dòng)態(tài)更新值,就可以解決了。
if (result.code===0) {
if (result.data) {
this.props.form.setFieldsValue({name:result.data});
}
}
ps:
還有一個(gè)問題,如果輸入了賬號(hào)進(jìn)行搜索后匹配了name,也填入了input框中。但是又修改了賬號(hào),然后直接提交,就會(huì)導(dǎo)致賬號(hào)和name不匹配,也就是name是存在的,但就不是對(duì)應(yīng)的賬號(hào)了。會(huì)導(dǎo)致保存之后,如果正確的賬號(hào)和name已經(jīng)存在,數(shù)據(jù)庫出現(xiàn)數(shù)據(jù)存儲(chǔ)問題。
解決:
給賬號(hào)輸入的Input框添加onChange事件,來觸發(fā)如果有改變就清空name框,防止錯(cuò)誤提交
change = (event) => {
this.props.form.setFieldsValue({name:''});
}
記錄一下
補(bǔ)充知識(shí):重新封裝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 原因是,這個(gè)值發(fā)生變化不會(huì)觸發(fā)重新渲染
// 不能只使用 flag 原因是,setFlag 是異步的
const [flag, setFlag] = useState(false)
// 非中文輸入時(shí)候顯示 value。中文輸入的時(shí)候顯示 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項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo
這篇文章主要為大家介紹了React手寫簽名組件react-signature實(shí)現(xiàn)簽字demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
從零開始搭建webpack+react開發(fā)環(huán)境的詳細(xì)步驟
這篇文章主要介紹了從零開始搭建webpack+react開發(fā)環(huán)境的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
react實(shí)現(xiàn)導(dǎo)航欄二級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)導(dǎo)航欄二級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
React onClick/onChange傳參(bind綁定)問題
這篇文章主要介紹了React onClick/onChange傳參(bind綁定)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Shopee在React?Native?架構(gòu)方面的探索及發(fā)展歷程
這篇文章主要介紹了Shopee在React?Native?架構(gòu)方面的探索,本文會(huì)從發(fā)展歷史、架構(gòu)模型、系統(tǒng)設(shè)計(jì)、遷移方案四個(gè)方向逐一介紹我們?nèi)绾我徊讲降貪M足多團(tuán)隊(duì)在復(fù)雜業(yè)務(wù)中的開發(fā)需求,需要的朋友可以參考下2022-07-07
在create-react-app中使用css modules的示例代碼
這篇文章主要介紹了在create-react-app中使用css modules的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
React中jquery引用的實(shí)現(xiàn)方法
這篇文章主要介紹了React中jquery引用的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
react-redux中connect()方法詳細(xì)解析
connect()是React-redux中的核心方法之一,它將react組件預(yù)redux中的Store真正連接在一起,下面這篇文章主要給大家介紹了react-redux中connect()方法的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05

