react中form.setFieldvalue數據回填時 value和text不對應的問題及解決方法
react中form.setFieldvalue數據回填時 value和text不對應的問題
react中進入表單的編輯頁面時 需要將之前新建的數據回填,如果是{}的形式 需要一一對應,如果是[]的形式 需要單獨的值意思是不接受數組對象也就是[{},{},{}]的形式解決方法:借用對象,用key去找value
// 進入編輯頁面 多選框的回填(轉換為對象的形式,用key來找value) let reversedynamicDataObj = {}; let result = []; Data.relatedProjects.map((i) => { JSON.stringify(i.id) .split(',') .map((ele) => { reversedynamicDataObj[ele] = { value: { name: i.name, id: ele }, key: ele, }; result.push(reversedynamicDataObj[ele]['key']); }); }); Data.relatedProjectIds = result; form.setFieldsValue(Data);
在react中對自己的組件使用setFieldsValue
setFieldsValue的用法
setFieldsValue是antd form的一個api,其作用是對指定的已使用from包裹的表單進行value設置。那么所以它的功能也很簡單,那就是給指定的input設置value。如下所示:
import React from "react"; import { Form, Input } from 'antd'; class TestForm extends React.Component { componentDidMount(){ const { setFieldsValue } = this.props.form; // 這里就能實現指定表單設置value setTimeout(()=>{ setFieldsValue({"username": "Tom"}) },5000) } render() { const { getFieldDecorator } = this.props.form; return ( <Form > <Form.Item> {getFieldDecorator('username', {})(<Input />)} </Form.Item> </Form> ); } } export default Form.create()(TestForm)
問題
那么假如把
{getFieldDecorator('username', {})(<Input />)}
換成
{getFieldDecorator('username', {})(<TestInput />)}
setFieldsValue 設置的value去哪了?相信聰明的你一眼就看透了,自然是在TestInput上面。假如TestInput是我們自定義的組件,那么我們則可以在props中找value這個屬性,那么假如我們的Input是自定義的input組件,我們可以這么寫
import React from "react"; import { Input } from 'antd'; class TestInput extends React.Component { state = { value: "" } componentWillReceiveProps(nextProps){ if(nextProps.value){ this.setState({ value: nextProps.value }) } } render() { return ( <div > <Input value={this.state.value}/> </div> ); } } export default TestInput
這樣,我們就能使用setFieldsValue設置自定義的組件了。
到此這篇關于react中form.setFieldvalue數據回填時 value和text不對應的問題的文章就介紹到這了,更多相關react中form.setFieldvalue數據回填內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
React高級指引之Refs and the DOM使用時機詳解
在典型的React數據流中,props是父組件與子組件交互的唯一方式。要修改一個子組件,你需要使用新的props來重新渲染它。但是,在某些情況下,你需要在典型數據流之外強制修改子組件2023-02-02React中的useMemo 和 useEffect 執(zhí)行順序
在 React 組件的渲染過程中,useMemo 和 useEffect 的執(zhí)行順序是不同的,本文給大家介紹React中的useMemo 和 useEffect 哪個先執(zhí)行,感興趣的朋友一起看看吧2025-01-01