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数据回填内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
React router cache route实现缓存页面流程介绍
react-router自身没有路由缓存的特性,在5.x版本之前,我们可以基于react-router-cache-route来实现路由缓存功能。但是react-router 6.x在实现上做了比较大的变化,react-router-cache-route没有提供相应的支持2023-01-01
最新评论