react中涉及的增加,刪除list方式
react涉及的增加,刪除list
做的項(xiàng)目中有一個(gè)功能是需要對(duì)多個(gè)Input組成的list可以新增和刪除。
剛開(kāi)始想的解決是直接使用index來(lái)做,這個(gè)可以新增,但是做不了刪除,會(huì)出現(xiàn)list錯(cuò)亂的問(wèn)題,即使是刪除中間的某一個(gè),但總也是刪除的最后一個(gè)。原因是index-1只會(huì)刪除最后一個(gè),再重新渲染后會(huì)刷新列表。
如果只是新增但是不填寫內(nèi)容,那么刪除了也無(wú)所謂,但如果新增后填寫再刪除就出問(wèn)題了。
解決辦法是使用唯一標(biāo)識(shí)符,也就是id,就是前端自己生成id,根據(jù)id刪除就不會(huì)錯(cuò)亂了。
在這個(gè)項(xiàng)目中,因?yàn)樾陆ê途庉嬍峭粋€(gè)頁(yè)面,而且在進(jìn)入這個(gè)頁(yè)面之后會(huì)根據(jù)是否有xxId來(lái)區(qū)分是新建還是編輯,因?yàn)闀?huì)請(qǐng)求兩個(gè)不同的接口來(lái)獲取數(shù)據(jù)。所以在從接口請(qǐng)求回來(lái)的返回值那邊做了處理,添加了唯一標(biāo)識(shí)符,也就是selfId。我是對(duì)dispatch后獲取的result進(jìn)行操作。
如下:
const dealListData = (result) => { // console.log('listR', result); if (result.length===0) { result.push({ selfId:1 }); } else { result.map((item, index) => { item.selfId = String(index + 1); return item; }); } // console.log(result); return result; };
新增的函數(shù)
list是指幾個(gè)Input組成的塊,是要對(duì)其新增和刪除
handleAdd = () => { let selfId = Number(this.state.list[this.state.list.length-1].selfId) + 1; // console.log(this.state.list[this.state.list.length-1].selfId +1); this.props.form.validateFields((err, value) => { if (!err) { this.state.list.push({ selfId:selfId }); this.props.onChange(this.state.list); } }); }
刪除的函數(shù)
handleDeleteItem = (i, selfId) => { this.setState({ list: this.state.list.filter(item => item.selfId !== selfId) }, () => { // console.log('delete', this.state.list); this.props.onChange(this.state.list); }); }
根據(jù)selfId進(jìn)行刪除
因?yàn)閘ist是我又重新封裝的子組件,而值要實(shí)時(shí)反映到父組件上去,需要都需要通過(guò)this.props.onChange事件去實(shí)時(shí)更新。這樣刪除和新增就沒(méi)有問(wèn)題了。
總結(jié)
不能根據(jù)下標(biāo)index進(jìn)行新增刪除,會(huì)錯(cuò)亂。需要有唯一標(biāo)識(shí)符用來(lái)更新。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React?SSR架構(gòu)Streaming?Render與Selective?Hydration解析
這篇文章主要為大家介紹了React?SSR架構(gòu)Streaming?Render與Selective?Hydration解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析
這篇文章主要介紹了react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02淺談webpack+react多頁(yè)面開(kāi)發(fā)終極架構(gòu)
這篇文章主要介紹了淺談webpack+react多頁(yè)面開(kāi)發(fā)終極架構(gòu),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11基于React Native 0.52實(shí)現(xiàn)輪播圖效果
這篇文章主要為大家詳細(xì)介紹了基于React Native 0.52實(shí)現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11ReactNative實(shí)現(xiàn)弧形拖動(dòng)條的代碼案例
本文介紹了ReactNative實(shí)現(xiàn)弧形拖動(dòng)條,本組件使用到了react-native-svg和PanResponder,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-02-02React+Node.js實(shí)現(xiàn)大文件傳輸與斷點(diǎn)續(xù)傳
這篇文章主要為大家詳細(xì)介紹了如何使用React前端和Node.js后端實(shí)現(xiàn)大文件傳輸和斷點(diǎn)續(xù)傳的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考下2024-12-12