Antd使用<Form.item>報(bào)錯(cuò)Warning: [antd: Form.Item] `children` is array of render props cannot have `name`

說(shuō)明:

只記錄個(gè)人錯(cuò)誤和解決方法汗茄,如果可以被饿,希望能幫助到您四康,給您提供一個(gè)思路,但技術(shù)不斷更新锹漱,所以一切以官網(wǎng)為主箭养。

需求:

在Antd的Modal中在Form組件中完成點(diǎn)擊按鈕展開(kāi)右側(cè):


展開(kāi)如下圖所示:


問(wèn)題1:

但Antd中默認(rèn)是一行一行,如果直接在< Form.item >中嵌套< Form.item >會(huì)報(bào)題示的錯(cuò)誤哥牍。

解決1:

在官方文檔中的 < Form > 說(shuō)明中毕泌,右側(cè)導(dǎo)航欄“復(fù)雜一點(diǎn)的控件
以下文字摘自官網(wǎng):

這里演示 Form.Item 內(nèi)有多個(gè)元素的使用方式。<Form.Item name="field" /> 只會(huì)對(duì)它的直接子元素綁定表單功能嗅辣,例如直接包裹了 Input/Select撼泛。如果控件前后還有一些文案或樣式裝點(diǎn),或者一個(gè)表單項(xiàng)內(nèi)有多個(gè)控件澡谭,你可以使用內(nèi)嵌的 Form.Item 完成愿题。你可以給 Form.Item 自定義 style 進(jìn)行內(nèi)聯(lián)布局,或者添加 noStyle 作為純粹的無(wú)樣式綁定組件(類似 3.x 中的 getFieldDecorator)。

- <Form.Item label="Field" name="field">
-   < Input />
- </Form.Item>
+ <Form.Item label="Field">
+   <Form.Item name="field" noStyle><Input /></Form.Item> // 直接包裹才會(huì)綁定表單
+   <span>description</span>
+ </Form.Item>

這里展示了三種典型場(chǎng)景:
Username:輸入框后面有描述文案或其他組件潘酗,在 Form.Item 內(nèi)使用 <Form.Item name="field" noStyle /> 去綁定對(duì)應(yīng)子控件杆兵。

Address:有兩個(gè)控件,在 Form.Item 內(nèi)使用兩個(gè) <Form.Item name="field" noStyle /> 分別綁定對(duì)應(yīng)控件仔夺。

BirthDate:有兩個(gè)內(nèi)聯(lián)控件琐脏,錯(cuò)誤信息展示各自控件下,使用兩個(gè) <Form.Item name="field" /> 分別綁定對(duì)應(yīng)控件缸兔,并修改 style 使其內(nèi)聯(lián)布局日裙。

注意,在 label 對(duì)應(yīng)的 Form.Item 上不要在指定 name 屬性惰蜜,這個(gè) Item 只作為布局作用昂拂。

實(shí)例:

const onChangeChecked = (checked) => {
      setRefreshType(checked)
}


<Form.Item
    label="One"
    valuePropName='checked'
    style={{ margin: 0 }}
>
    <Form.Item
        name="one"
        valuePropName='checked'
        style={{ display: 'inline-block', marginRight: '15%' }}
    >
        <Switch onChange={onChangeChecked} />
    </Form.Item>

    <Form.Item
        name="first"
        style={{ display: 'inline-block' }}
    >
        <div>
            <label>One-first:</label>
            <InputNumber min={1} defaultValue={editIntervalTime || 1} />
            <span className="ant-form-text"> minutes</span>
        </div>
    </Form.Item>
    
</Form.Item>

<Form.Item
    label="Two"
    style={{ margin: 0 }}
>
    <Form.Item
        name="two"
        valuePropName='checked'
        style={{ display: 'inline-block', marginRight: '15%' }}
    >
        <Switch onChange={onChangeCapping} />
    </Form.Item>

    <div style={{ display: 'inline-block' }}>
        <Form.Item
            name="two_first"
            style={{ display: 'inline-block' }}
        >
            <div>
                <label>Two-first:</label>
                <InputNumber min={0} defaultValue={editImpLimit || 1} />
            </div>
        </Form.Item>

        <Form.Item
            name="two_second"
            style={{ display: 'inline-block' }}
        >
            <div>
                <label>Two-second:</label>
                <Radio.Group onChange={onChangeRadio} value={editImpType || 1}  >
                    <Radio value={1}>Male</Radio>
                    <Radio value={2}>Female</Radio>
                </Radio.Group>
            </div>
        </Form.Item>
    </div>

</Form.Item>

問(wèn)題2:

< Form >默認(rèn)提交事件 onFinish={onFinish},無(wú)法獲取到嵌套中的數(shù)據(jù)抛猖;

解決2:

從編輯事件中格侯,把對(duì)應(yīng)數(shù)據(jù)提升為共享數(shù)據(jù)。

問(wèn)題3:

提升到共享的數(shù)據(jù)樟结,無(wú)法被form.resetFields() 清除养交;

解決3:

在Modal取消事件中,把對(duì)應(yīng)共享數(shù)據(jù)清空瓢宦;

const handleCancel = () => {
        setVisible(false)
        setEditOne()
        setEditTwoFirst()
        setEditTwoSecond()
};

Modal中添加語(yǔ)句 :destroyOnClose={true}
(詳見(jiàn) Modal 碎连,< Modal /> 默認(rèn)關(guān)閉后狀態(tài)不會(huì)自動(dòng)清空, 如果希望每次打開(kāi)都是新內(nèi)容,請(qǐng)?jiān)O(shè)置 destroyOnClose驮履。)

收尾:

在解決過(guò)程中得到了以下的幫助:

  1. 《【Antd4.x Form問(wèn)題】[antd: Form.Item] children is array of render props cannot have name.》
  2. Antd官網(wǎng)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鱼辙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玫镐,更是在濱河造成了極大的恐慌倒戏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恐似,死亡現(xiàn)場(chǎng)離奇詭異杜跷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)矫夷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門葛闷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人双藕,你說(shuō)我怎么就攤上這事淑趾。” “怎么了忧陪?”我有些...
    開(kāi)封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵扣泊,是天一觀的道長(zhǎng)近范。 經(jīng)常有香客問(wèn)我,道長(zhǎng)延蟹,這世上最難降的妖魔是什么评矩? 我笑而不...
    開(kāi)封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮等孵,結(jié)果婚禮上稚照,老公的妹妹穿的比我還像新娘蹂空。我一直安慰自己俯萌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布上枕。 她就那樣靜靜地躺著咐熙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辨萍。 梳的紋絲不亂的頭發(fā)上棋恼,一...
    開(kāi)封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音锈玉,去河邊找鬼爪飘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拉背,可吹牛的內(nèi)容都是我干的师崎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼椅棺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼犁罩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起两疚,我...
    開(kāi)封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤床估,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后诱渤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丐巫,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年勺美,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了递胧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡励烦,死狀恐怖谓着,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坛掠,我是刑警寧澤赊锚,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布治筒,位于F島的核電站,受9級(jí)特大地震影響舷蒲,放射性物質(zhì)發(fā)生泄漏耸袜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一牲平、第九天 我趴在偏房一處隱蔽的房頂上張望堤框。 院中可真熱鬧,春花似錦纵柿、人聲如沸蜈抓。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沟使。三九已至,卻和暖如春渊跋,著一層夾襖步出監(jiān)牢的瞬間腊嗡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工拾酝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燕少,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓蒿囤,卻偏偏與公主長(zhǎng)得像客们,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蟋软,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354