Keep-Alive中通過component多次加載同樣的動(dòng)態(tài)組件無法保持狀態(tài)的解決辦法 2023年11月06日 星期一技術(shù)分享admin 問題描述項(xiàng)目功能上有需要?jiǎng)討B(tài)添加組件的需求,比如tab標(biāo)簽功能,動(dòng)態(tài)添加標(biāo)簽,同時(shí)添加后的標(biāo)簽在切換時(shí)需要保存狀態(tài),自然而然想到了keep–alive,這就有了下面的代碼: 一、tabPage 定義方式1:通過components事先定義好所有會(huì)加載的組件: tagPage 通過ref或computed的方式判斷當(dāng)前的標(biāo)簽的類型并返回: 這個(gè)時(shí)候keep–alive是工作的,但這里的問題是:動(dòng)態(tài)創(chuàng)建的組件有多個(gè)是同一個(gè)組件,比如APIAdd, 由于keep?alive的緩存機(jī)制是通過組件名稱來緩存的,同一個(gè)組件被打開多次的話其實(shí)顯示的還是第一次打開的那個(gè),這和我們實(shí)際的應(yīng)用場(chǎng)景不符合,不能緩存界面狀態(tài)(比如表單中輸入的內(nèi)容): 二、tabPage 定義方式2:為了解決方式1中的同名組件只能加載一次的問題,需要同一個(gè)組件被加載多次,只是里面展示的內(nèi)容不一樣,所以tabPage通過defineAsyncComponent異步加載: 這里組件能加載成功,同名組件每次創(chuàng)建標(biāo)簽都會(huì)生成一個(gè)新的,但是這里的問題是:沒有起到keep–alive的效果,已經(jīng)加載的組件,在切換時(shí)又重新創(chuàng)建了組件,?狀態(tài)自然也沒有得到保存,: 解決辦法:為了解決同一個(gè)組件可以被動(dòng)態(tài)加載多次,同時(shí)需要能keep–alive,解決的辦法就是不用component,而是把所有動(dòng)態(tài)添加的組件都各自放在一個(gè)keep–alive中,根據(jù)條件切換顯示即可: 這樣每個(gè)組件都可以加載自己的數(shù)據(jù),并且可以keep?alive保存狀態(tài):