美文网首页
antd textArea无法初始化默认值 defaultVal

antd textArea无法初始化默认值 defaultVal

作者: 广兰路地铁 | 来源:发表于2020-03-21 20:32 被阅读0次

本人在开发过程中遇到这样一个问题,打算通过useEffect来初始化表单的默认值,这里使用的是react下的hooks Api,但是textArea的初始值始终无法设置成功:

import React, { useState, useEffect, useRef } from 'react';

//  文本框默认内容
const [textAreaContent, setText] = useState('sdc');

//  使用useEffect初始化表单
useEffect(() => {
    async function pageInfo() {
        const { data } = await getPageInfo();
        const { imgList, text } = JSON.parse(data[0]);
        setText(text);
    };
    pageInfo();
}, []);


//  显示部分
<Form>
    <FormItem label='内容' name={['user', 'pageContent']}>
        <TextArea value={textAreaContent} defaultValue={textAreaContent}/>
    </FormItem>
</From>

通过排查发现接口请求没有问题,使用hooks设置字符串的功能也正常,但就是无法设置textArea的默认值。甚至直接给TextArea的defaultValue和value写死字符串都无法生效。官网上有如下解释:

为什么 Form.Item 下的子组件 defaultValue 不生效?#  
当你为 Form.Item 设置 name 属性后,子组件会转为受控模式。因而 defaultValue 不会生效。你需要在 Form 上通过 initialValues 设置默认值。

相关链接
可以参考官网的建议,或参考class实现下针对antd 表单组件的赋初始值方式:

    const { currentUser, form } = this.props;
    form.setFieldsValue(obj);

考虑到可能要通过form的setFieldsValue Api才能达到目的,于是对函数式组件进行改造:

import React, { useState, useEffect, useRef } from 'react';

const formRef = useRef(null);

//  文本框默认内容
const [textAreaContent, setText] = useState('sdc');

//  使用useEffect初始化表单
useEffect(() => {
    async function pageInfo() {
        const { data } = await getPageInfo();
        const { imgList, text } = JSON.parse(data[0]);
        formRef.current.setFieldsValue({
           user: {
             pageContent: text
           }
        })
        setText(text);
    };
    pageInfo();
}, []);


//  显示部分
<Form ref={formRef}>
    <FormItem label='内容' name={['user', 'pageContent']}>
        <TextArea />
    </FormItem>
</From>

这里通过useRef来获取antd form的实例,然后调用它的setFieldsValue,测试后发现TextArea初始值赋值成功

相关文章

网友评论

      本文标题:antd textArea无法初始化默认值 defaultVal

      本文链接:https://www.haomeiwen.com/subject/mfnuyhtx.html