美文网首页
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