在react項(xiàng)目中使用antd的form組件,動態(tài)設(shè)置input框的值
問題:
創(chuàng)建賬號時,輸入賬號后不搜索直接保存,提示查詢后,再點(diǎn)搜索就不能搜索這個賬號了
原因:
點(diǎn)擊保存之后,對表單進(jìn)行了驗(yàn)證,導(dǎo)致之后請求的數(shù)據(jù)無法在更新到input框中,也就是說即使在state中有值,也不會更新initialValue值,就導(dǎo)致搜索后的值不能正確填入input中,表單也就提交不了。
解決辦法:
不使用initialValue設(shè)置動態(tài)更新的值,而是使用 this.props.form.setFieldValue({name:data}); 用于動態(tài)更新值,就可以解決了。
if (result.code===0) { if (result.data) { this.props.form.setFieldsValue({name:result.data}); } }
ps:
還有一個問題,如果輸入了賬號進(jìn)行搜索后匹配了name,也填入了input框中。但是又修改了賬號,然后直接提交,就會導(dǎo)致賬號和name不匹配,也就是name是存在的,但就不是對應(yīng)的賬號了。會導(dǎo)致保存之后,如果正確的賬號和name已經(jīng)存在,數(shù)據(jù)庫出現(xiàn)數(shù)據(jù)存儲問題。
解決:
給賬號輸入的Input框添加onChange事件,來觸發(fā)如果有改變就清空name框,防止錯誤提交
change = (event) => { this.props.form.setFieldsValue({name:''}); }
記錄一下
補(bǔ)充知識:重新封裝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 原因是,這個值發(fā)生變化不會觸發(fā)重新渲染 // 不能只使用 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項(xiàng)目中使用antd的form組件,動態(tài)設(shè)置input框的值就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
React事件監(jiān)聽和State狀態(tài)修改方式
這篇文章主要介紹了React事件監(jiān)聽和State狀態(tài)修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08React子組件調(diào)用父組件方法獲取的數(shù)據(jù)不是最新值的解決方法
這篇文章主要介紹了React子組件調(diào)用父組件方法獲取的數(shù)據(jù)不是最新值的解決方法,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-09-09react18中react-redux狀態(tài)管理的實(shí)現(xiàn)
本文主要介紹了react18中react-redux狀態(tài)管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05React類組件中super()和super(props)的區(qū)別詳解
這篇文章給大家詳細(xì)介紹了React類組件中super()和super(props)有什么區(qū)別,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01如何不使用eject修改create-react-app的配置
許多剛開始接觸create-react-app框架的同學(xué),不免都會有個疑問:如何在不執(zhí)行eject操作的同時,修改create-react-app的配置。2021-04-04詳解使用create-react-app添加css modules、sasss和antd
這篇文章主要介紹了詳解使用create-react-app添加css modules、sasss和antd,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07