pinia setup 函數(shù)式寫(xiě)法 reset 實(shí)現(xiàn)

pinia本身提供了一個(gè)reset方法,可以重置store

store.$reset()

但是在項(xiàng)目中應(yīng)用setup語(yǔ)法的時(shí)候會(huì)拋出錯(cuò)誤,網(wǎng)上找了方法解決了問(wèn)題,現(xiàn)整理一下

分析原因

根據(jù)報(bào)錯(cuò)可以理解,因?yàn)閟etup寫(xiě)法中 storer 的 $reset 方法未實(shí)現(xiàn),那順著這個(gè)思路就需要自己手動(dòng)實(shí)現(xiàn)一下

實(shí)現(xiàn)方式

pinia支持自定義插件,因此通過(guò)插件將自定義的$reset方法寫(xiě)入

const store = createPinia();
// 手動(dòng)重置
const resetPlugin = (plugin) => {
  const { store, options } = plugin;
  // 備份初始值
  const initialState = JSON.parse(JSON.stringify(store.$state));
  // 重置
  store.$reset = () => {
    store.$state = JSON.parse(JSON.stringify(initialState));
  };
};
store.use(resetPlugin);

其它問(wèn)題

1、有的文章推薦使用store.$patch()方法實(shí)現(xiàn),實(shí)際項(xiàng)目中有個(gè)別值未重置,原因暫時(shí)未知,因此目前還是用上述代碼實(shí)現(xiàn)
2、持久化
項(xiàng)目中使用了pinia-plugin-persist進(jìn)行部分字段持久化,遇到pinia重置了但localStorage未重置,排查了好久才解決,真相令人暖心:只需要將pinia-plugin-persistresetPlugin之后掛載就可以了

store.use(resetPlugin);
store.use(piniaPluginPersist);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容