react hook使用useState更新數(shù)組,無法更新問題及解決
問題描述
const [textList, setTextList] = useState(原數(shù)組); setTextList(新數(shù)組);
當修改原數(shù)組時,如果原數(shù)組是個深層數(shù)組,使用setTextList修改時,不會觸發(fā)頁面刷新
原因分析
這個涉及到可變對象和不可變對象的知識,
在vue和react中,如果更新可變對象時,可能會引起視圖更新,
這是因為,vue和react默認都是淺監(jiān)聽,只會監(jiān)聽數(shù)據(jù)的第一層,
如果數(shù)據(jù)是引用類型,內層數(shù)據(jù)發(fā)生改變,并不會監(jiān)聽到。
解決方法
這里應該先將原數(shù)組淺拷貝,賦值給新數(shù)組,再修改新數(shù)組(不影響原狀態(tài))
將修改后的新數(shù)組使用setValue傳遞進去,這樣就會引起視圖更新
const [value, setValue] = useState(initialArray);
return{
//item是個數(shù)組
add: (item: T) => setValue([...value, item]),
removeIndex: (index: number) => {
// 把value copy一遍,解構一遍,再把結構的值為了生成新的數(shù)組,相當于淺拷貝,這樣才能觸發(fā)更新數(shù)據(jù)
const copy = [...value];
copy.splice(index, 1);
setValue(copy);
},
}
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Ant Design與Ant Design pro入門使用教程
Ant Design 是一個服務于企業(yè)級產品的設計體系,組件庫是它的 React 實現(xiàn),antd 被發(fā)布為一個 npm 包方便開發(fā)者安裝并使用,這篇文章主要介紹了Ant Design與Ant Design pro入門,需要的朋友可以參考下2023-12-12
React styled components樣式組件化使用流程
styled-components 是react的一個第三方庫,一種css私有化的方式。用來實現(xiàn)CSS in JS 的方式之一。在多人協(xié)作中,css必定會出現(xiàn)命名沖突,與vue的scoped解決方案不同,react用styled-components的給類名加了隨機字符的方式實現(xiàn)了css的私有化2023-02-02
react基于Ant Desgin Upload實現(xiàn)導入導出
本文主要介紹了react基于Ant Desgin Upload實現(xiàn)導入導出,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01
react 頁面加載完成后自動執(zhí)行標簽的點擊事件的兩種操作方法
這篇文章主要介紹了react 頁面加載完成后自動執(zhí)行標簽的點擊事件,本文給大家分享兩種操作方法結合示例代碼給大家講解的非常詳細,需要的朋友可以參考下2022-12-12
react?Table準備Spin?Empty?ConfigProvider組件實現(xiàn)
這篇文章主要為大家介紹了react?Table準備Spin、Empty、ConfigProvider組件實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2023-02-02
react18?hooks自定義移動端Popup彈窗組件RcPop
這篇文章主要介紹了react18?hooks自定義移動端Popup彈窗組件RcPop,react-popup?基于react18+hook自定義多功能彈框組件,整合了msg/alert/dialog/toast及android/ios彈窗效果,需要的朋友可以參考下2023-08-08
react-redux及redux狀態(tài)管理工具使用詳解
Redux是為javascript應用程序提供一個狀態(tài)管理工具集中的管理react中多個組件的狀態(tài)redux是專門作狀態(tài)管理的js庫(不是react插件庫可以用在其他js框架中例如vue,但是基本用在react中),這篇文章主要介紹了react-redux及redux狀態(tài)管理工具使用詳解,需要的朋友可以參考下2023-01-01

