vue3使用Pinia修改state的三種方法(直接修改,$patch,actions)
本篇記錄vue3 使用pinia修改state的三種方法
1. 新建vue3項(xiàng)目,安裝Pinia(參考鏈接:Vue狀態(tài)管理工具Pinia的安裝與使用教程_vue.js_腳本之家 (jb51.net))
2.目錄
app.js
import {defineStore} from "pinia" const appStore = defineStore('appStore', { state: () => ({ baseUrl: 'https://www.baidu.com/', ipList: ['192.168.10.777', '192.168.10.999', '192.168.10.888'] }), actions: { changeState(params) { console.log('接收到的參數(shù)===>', params) this.baseUrl = params this.ipList.push('192.168.10.100') } } }) export default appStore
第一種修改方式:直接state = '數(shù)據(jù)' ,不推薦
const store = appStore() let {baseUrl, ipList} = storeToRefs(store) /* * 第一種修改方式:雖然可以直接修改,但是出于代碼結(jié)構(gòu)來(lái)說(shuō), * 全局的狀態(tài)管理還是不要直接在各個(gè)組件處隨意修改狀態(tài), * 應(yīng)放于 action 中統(tǒng)一方法修改(piain沒有mutation) * 并不推薦?。?! * */ function changeData() { // baseUrl = 'https://www.taobao.com/' //error 這么寫是沒有用的 store.baseUrl = 'https://www.taobao.com/' //success store.ipList.push('192.168.10.111') //success }
第二種修改方式:使用$patch修改數(shù)據(jù)
const store = appStore() // 第二種修改方式:使用$patch改變數(shù)據(jù) $patch 可以同時(shí)修改多個(gè)值 function changeDataByPatch() { /* $patch也有兩種的調(diào)用方式 第一種寫法的在修改數(shù)組時(shí),假如我只想要把 ipList 的中第2項(xiàng)改成‘192.168.10.222', 但是也需要傳入整個(gè)包括所有元素的數(shù)組,這無(wú)疑增加了書寫成本和風(fēng)險(xiǎn),顯然是不合理的,所以一般都推薦使用第二種傳入一個(gè)函數(shù)的寫法 * */ // 第一種 $patch方法 // store.$patch({ // baseUrl: 'https://www.jd.com/', // ipList: ['192.168.10.777', '192.168.10.222', '192.168.10.888'] // }) // 第二種 $patch方法 store.$patch((state) => { state.baseUrl = 'https://www.jd.com/' state.ipList[0] = '192.168.10.222' }) }
第三種修改方式:使用actions中的方法修改數(shù)據(jù) (推薦)
// 第三種修改方式:調(diào)用store中的action改變數(shù)據(jù) function changeDataByAction() { store.changeState('https://www.alibabagroup.com/cn/global/home') //可以直接給actions里面的方法傳遞參數(shù) }
以上就是使用pinia修改數(shù)據(jù)的三種方法
pinia重置數(shù)據(jù)的功能,這個(gè)操作很簡(jiǎn)單
const store = appStore() // 重置數(shù)據(jù) function resetData() { store.$reset() }
完整代碼:
<template> <div> <strong>baseUrl:</strong> {{ baseUrl }} </div> <div> <strong>ipList:</strong> {{ ipList }} </div> <div> <button @click="changeData">直接在頁(yè)面組件中改變數(shù)據(jù)</button> <button @click="changeDataByPatch">使用$patch改變數(shù)據(jù)</button> <button @click="changeDataByAction">使用action改變數(shù)據(jù)</button> <button @click="resetData">重置數(shù)據(jù)</button> </div> </template> <script> import appStore from "@/store/app" import {storeToRefs} from "pinia" export default { name: "Home", setup() { const store = appStore() let {baseUrl, ipList} = storeToRefs(store) /* * 第一種修改方式:雖然可以直接修改,但是出于代碼結(jié)構(gòu)來(lái)說(shuō), * 全局的狀態(tài)管理還是不要直接在各個(gè)組件處隨意修改狀態(tài), * 應(yīng)放于 action 中統(tǒng)一方法修改(piain沒有mutation) * 并不推薦?。?! * */ function changeData() { // baseUrl = 'https://www.taobao.com/' //error 這么寫是沒有用的 store.baseUrl = 'https://www.taobao.com/' //success store.ipList.push('192.168.10.111') //success } // 第二種修改方式:使用$patch改變數(shù)據(jù) $patch 可以同時(shí)修改多個(gè)值 function changeDataByPatch() { /* $patch也有兩種的調(diào)用方式 第一種寫法的在修改數(shù)組時(shí),假如我只想要把 ipList 的中第2項(xiàng)改成‘192.168.10.222', 但是也需要傳入整個(gè)包括所有元素的數(shù)組,這無(wú)疑增加了書寫成本和風(fēng)險(xiǎn),顯然是不合理的,所以一般都推薦使用第二種傳入一個(gè)函數(shù)的寫法 * */ // 第一種 $patch方法 // store.$patch({ // baseUrl: 'https://www.jd.com/', // ipList: ['192.168.10.777', '192.168.10.222', '192.168.10.888'] // }) // 第二種 $patch方法 store.$patch((state) => { state.baseUrl = 'https://www.jd.com/' state.ipList[0] = '192.168.10.222' }) } // 第三種修改方式:調(diào)用store中的action改變數(shù)據(jù) function changeDataByAction() { store.changeState('https://www.alibabagroup.com/cn/global/home') //可以直接給actions里面的方法傳遞參數(shù) } // 重置數(shù)據(jù) function resetData() { store.$reset() } return { baseUrl, ipList, changeData, changeDataByPatch, changeDataByAction, resetData } } } </script>
以上就是vue3使用Pinia修改state的三種方法(直接修改,$patch,actions)的詳細(xì)內(nèi)容,更多關(guān)于vue3 Pinia修改state的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Vue3+Vite項(xiàng)目中引入pinia和pinia-plugin-persistedstate的方法代碼
- vue3配置permission.js和router、pinia實(shí)現(xiàn)路由攔截的簡(jiǎn)單步驟
- vue3?pinia實(shí)現(xiàn)持久化詳解
- vue3中pinia的使用方法
- vue3 pinia使用及持久化注冊(cè)
- vue3項(xiàng)目使用pinia狀態(tài)管理器的使用
- Vue狀態(tài)管理工具Pinia的安裝與使用教程
- Vue3之狀態(tài)管理器(Pinia)詳解及使用方式
- Vue中Pinia的各種詳細(xì)說(shuō)明和使用示例
相關(guān)文章
在Vue當(dāng)中同時(shí)配置多個(gè)路由文件的方法案例代碼
這篇文章主要介紹了在Vue當(dāng)中同時(shí)配置多個(gè)路由文件的方法,包含具體代碼,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12elementui el-table中如何給表頭 el-table-column 加一個(gè)鼠
本文通過(guò)實(shí)例代碼介紹如何在使用Element UI的el-table組件時(shí)為表頭添加提示功能,通過(guò)結(jié)合el-tooltip組件實(shí)現(xiàn)鼠標(biāo)移入時(shí)顯示提示信息,感興趣的朋友跟隨小編一起看看吧2024-11-11使用Webpack提升Vue.js應(yīng)用程序的4種方法(翻譯)
這篇文章主要介紹了使用Webpack提升Vue.js應(yīng)用程序的4種方法(翻譯),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決
Volar 與vetur相同,volar是一個(gè)針對(duì)vue的vscode插件,下面這篇文章主要給大家介紹了關(guān)于Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06vue實(shí)現(xiàn)登錄數(shù)據(jù)的持久化的使用示例
在Vue.js中,實(shí)現(xiàn)登錄數(shù)據(jù)的持久化需要使用瀏覽器提供的本地存儲(chǔ)功能,Vue.js支持使用localStorage和sessionStorage來(lái)實(shí)現(xiàn)本地存儲(chǔ),本文就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-10-10vue 計(jì)時(shí)器組件的實(shí)現(xiàn)代碼
本篇文章主要介紹了vue 計(jì)時(shí)器組件的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09