第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React:從狀態(tài)中刪除動態(tài)輸入,重新渲染

React:從狀態(tài)中刪除動態(tài)輸入,重新渲染

狐的傳說 2023-04-27 17:11:09
我在調(diào)試這種情況時遇到問題。我正在嘗試從 API 提供的數(shù)組中刪除索引。在檢查其父級的道具更改后,我將其存儲在父級狀態(tài)中。這里一切都很好。我可以將任何道具更改存儲在父表單狀態(tài)中。父表單映射templateData中的所有內(nèi)容,我確定它是什么類型,然后根據(jù)需要渲染一個組件。刪除按鈕將始終只在DynamicInputGroup中,因此我通過道具向下傳遞該功能。在DynamicInputGroup中,我需要映射從父級傳遞的數(shù)組,然后映射該數(shù)組中的對象以顯示每個單獨的輸入。再次使用傳遞下來的道具來確定要渲染的輸入,與父級相同。這是出了問題的地方。當(dāng)我單擊刪除時,假設(shè)索引 2(共 5 個),我看到該索引在狀態(tài)中被刪除,但呈現(xiàn)的是索引 5 被刪除。我不確定該怎么做。我已經(jīng)完成研究并閱讀了密鑰發(fā)揮作用?我試圖將渲染函數(shù)中的一個變量設(shè)置為狀態(tài),這樣它就會刷新,但什么也沒有。最后一個索引總是被刪除。哈!家長表格this.state = {    templateData: []}removeGroupItem = (index, inputName ) => {    let group = `${inputName}__group`    const newState = this.state;    if (index === -1) return;    newState.templateData[group].splice(index, 1);    console.log(newState) // THIS SHOWS CORRECT STATE    this.setState(newState);}render() {    return (      {Object.keys(this.state.templateData).map((name, key) => {          let data = { // SETTING inputType TO DISPLAY CORRECT COMPONENT }          return (              <Fragment key={key}>                  {data.inputType == 'input' && <DynamicTextInput {...data} />}                  {data.inputType == 'rtf' && <DynamicRTF {...data}  />}                  {data.inputType == 'img' && <DynamicImageUpload {...data} />}                  {data.inputType == 'group' && <DynamicInputGroup {...data} removeGroupItem={this.removeGroupItem} />} // COMPONENT THAT HOLDS REMOVE BUTTON              </Fragment>          )      })}    )}動態(tài)輸入組組件this.state = {    value: []}componentDidMount() {    this.setState({ value: this.props.value })}componentDidUpdate(prevProps) {    if (this.props.value !== prevProps.value) {        this.setState({            value: this.props.value        })    }}
查看完整描述

2 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊

使用索引作為組件的鍵是一種不好的做法,尤其是當(dāng)它是一個不斷變化的列表時。鍵應(yīng)該是組件的唯一標(biāo)識符。

如果您的控件沒有唯一標(biāo)識符,您可以基于時間戳創(chuàng)建一個標(biāo)識符,某種 uuid,您將存儲在您的狀態(tài)中,并且始終只引用一個控件元素。

想象一下,您有 1 個輸入元素的值為 的情況TextInput 1。然后你從它添加另一個輸入,它繼承它的密鑰?,F(xiàn)在您已經(jīng)破壞了影子 DOM,因為您引用的是新輸入而不是舊輸入,因為帶有 key={0} 的輸入的值為TextInput 1,但這不是您所期望的,因為您想要引用另一個輸入。


查看完整回答
反對 回復(fù) 2023-04-27
?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊

這一行有問題:

<Fragment?key={key}>

由于您使用數(shù)組的索引來呈現(xiàn)那些Fragments,協(xié)調(diào)失敗length次數(shù)和“最后一個元素”被刪除。

查看完整回答
反對 回復(fù) 2023-04-27
  • 2 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號