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-12
elementui 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-10
Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決
Volar 與vetur相同,volar是一個(gè)針對(duì)vue的vscode插件,下面這篇文章主要給大家介紹了關(guān)于Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
vue實(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-10
vue 計(jì)時(shí)器組件的實(shí)現(xiàn)代碼
本篇文章主要介紹了vue 計(jì)時(shí)器組件的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09

