沒有一定要用Pinia? 簡單說對資料管理的理解
反思是否濫用工具或是思考是否因為工具而固化。
先打個預防針,本文是建立在基礎不足及可能沒有搞懂工具的目的產生的錯誤用法,請斟酌壓抑怒火XD
前言
會有這個體悟是來自於在做 side project 時知道 tanstack query 這個工具後,對於非同步的資料處理有了進一步的認識後,也讓我想到,以前是否都搞錯Pinia的使用方式呢?
原本我的使用方式?
原本在寫 Vue 時,會無腦的導入後並將各模組所需要的資料、方法做包裝進 store,完全沒有考慮到這些資料是不是其他非父子模組的地方也需要,只覺得這樣包起來很有規矩(? 認知提升(? 當認知稍微提升之後想到,既然我沒有其他模組要用,為什麼不用 props 傳進去就好? 幹嘛寫一個store 增加維護成本跟記憶體負擔?
還有一點是,如果資料來源是透過 API 拿到的,我該怎麼保證拿到的資料都是最新的? 無法掌握資料更新的地方就是個風險,變成每次其實還是要打一次API去確保拿到的資料是最新的。
後來我怎麼做?
當有了上面的想法後,我思考是不是我原本對於模組資料傳遞的設計就是錯誤的,所以開始在每次開發前先著墨在資料傳遞上而不是一昧的寫程式。
假設我很明確的知道A、B模組互為父子模組,那就在父模組宣告變數即可,子模組需要什麼傳下去即可。 可以控管資料來源是單一的,也因為其他模組根本也沒有要使用到,等卸載組件後就釋出記憶體了。
也意識到既然在沒有做快取的情況下,那不同模組拿相同資料就直接打API拿就好,根本也不用特別存起來,如此一來也不用擔心重新整理後資料被洗掉、資料是否不同步的情況。
當然這時知道有個工具叫 tanstack query 可以做這件事情可能有更好的處理方式又是另外一回事了。
結語
從這件事情後我學到一件事情,永遠要清楚知道自己使用的工具設計的目的是什麼XD (還有要讀官方文件)