最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vuex數(shù)據(jù)的存儲(chǔ)與獲取方式

 更新時(shí)間:2022年06月24日 15:41:32   作者:Vc編碼中  
這篇文章主要介紹了Vuex數(shù)據(jù)的存儲(chǔ)與獲取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Vuex數(shù)據(jù)存儲(chǔ)與獲取

因?yàn)樽罱枰獙?duì)原有項(xiàng)目進(jìn)行改造,之前沒(méi)有認(rèn)真研究過(guò)vuex的使用,今天把學(xué)習(xí)官方文檔的過(guò)程記錄下來(lái)以供日后查閱,同時(shí)也希望能夠?yàn)槠渌_(kāi)發(fā)人員提供參考。

vuex的核心點(diǎn)是store,store本質(zhì)上是一個(gè)倉(cāng)庫(kù),它可以存儲(chǔ)大部分的state。而這種存儲(chǔ)是響應(yīng)式的,如果state發(fā)生變化,那么對(duì)應(yīng)的組件也會(huì)響應(yīng)更新。如果想要改變state,那么需要通過(guò)commit mutation。

以下示例引用自官網(wǎng)(開(kāi)始 | Vuex)

// 創(chuàng)建一個(gè)新的 store 實(shí)例
const store = createStore({
? state () {
? ? return {
? ? ? count: 0
? ? }
? },
? mutations: {
? ? increment (state) {
? ? ? state.count++
? ? }
? }
})

創(chuàng)建完成后可在vue組件中可以以this.$store.commit('具體mutation方法')來(lái)提交狀態(tài)變更

然后通過(guò)this.$store.state.x具體某一statex來(lái)得到對(duì)象的內(nèi)容。

如果想要更簡(jiǎn)便的從store實(shí)例中讀取狀態(tài),可以直接在computed中返回某個(gè)狀態(tài):

// 創(chuàng)建一個(gè) Counter 組件
const Counter = {
? template: `<div>{{ count }}</div>`,
? computed: {
? ? count () {
? ? ? return store.state.count
? ? }
? }
}

但是為了避免多次出發(fā)dom,vue插件可以將store實(shí)例從跟組件中注入到所有的子組件中,子組件可以通過(guò)$store訪問(wèn)。

const Counter = {
? template: `<div>{{ count }}</div>`,
? computed: {
? ? count () {
? ? ? return this.$store.state.count
? ? }
? }
}

當(dāng)我們需要的狀態(tài)為多個(gè)時(shí),可以利用mapState來(lái)生成計(jì)算屬性

computed: {
? localComputed () { /* ... */ },
? // 使用對(duì)象展開(kāi)運(yùn)算符將此對(duì)象混入到外部對(duì)象中
? ...mapState({
? ? // ...
? })
}

可以舉一個(gè)實(shí)際應(yīng)用的例子

首先在main.js中注冊(cè)

import Vuex from 'vuex'?
Vue.use(Vuex)
?
const store = new Vuex.Store({
//存放全局狀態(tài)
state:{
count:0
},
?
//getters是對(duì)state的加工包裝,比如將一些數(shù)據(jù)進(jìn)行過(guò)濾等,為只讀的方法,通過(guò)return獲取值
getters:{
countNum(state){
return `the account NUm is ${state.count}`
}
}
?
//通過(guò)mutations修改state,如果直接修改state會(huì)導(dǎo)致一些特性丟失
mutations:{
?add(state){
state.count++
},
?minus(state){
state.count--
}??
}??
//actions涉及業(yè)務(wù)邏輯,不涉及頁(yè)面的一些行為?
})

在對(duì)應(yīng)的vue組件中,如下代碼可在頁(yè)面顯示count的值,則可在vue的一個(gè)組件例如app.vue中進(jìn)行如下操作

<template>
?
<div>
<h1>{{count}}</h1>
<h2>{{countNum}} </h2>
</div>
?
</template>
<script>?
import {mapState,mapGetters} from 'vuex'?
export default{
?
//
computed:{
...mapState(['count'])
...mapGetters{['countNum']}
}
}
</script>

若想使用mutation中的方法,則可在另一個(gè)vue文件例如hello.vue中進(jìn)行如下操作,同時(shí)為了方便觀察,在控制臺(tái)中可以選擇vuex實(shí)時(shí)觀察vue內(nèi)容

<template>
<div>
<button @click=addnum>增加</button>
</div>
</template>

  

methods:{
...mapMutations('add','minus')
addnum(){
//mutations必須通過(guò)commit才能使用,但是因?yàn)橹罢{(diào)用了...mapMutations,所以可以直接調(diào)用this.add();
//this.$store.commit('add')
this.add()
?
//使用mutations會(huì)確保有vuex狀態(tài)改變的記錄,如果直接this.$store.state.count也會(huì)生效
//this.$store.state.count++但是此種寫(xiě)法開(kāi)發(fā)工具vuex里面無(wú)法產(chǎn)生記錄
}
}
?
<javascript>
</javascript>

一般情況下,簡(jiǎn)單的業(yè)務(wù)邏輯要寫(xiě)在mutation里,復(fù)雜的業(yè)務(wù)邏輯要寫(xiě)在actions里 

Vuex存值與取值(簡(jiǎn)單易懂)

組件內(nèi)存值

methods: { ?
? ? ?fn() { ? ??
? ? ? ? ? ? ?this.$store.commit('setValue',xxx) ? //setValue存值隨便起個(gè)名, ? xxx要存的值?
? ? ? ? ? } ? ? ? ? ??
? ? }

store.js的state中

const state = {
? ? xxx:'',//把存的那個(gè)值的名字初始化一下
}

store.js的matution中

? setValue(state,item){
? ? state.xxx= item;//第二個(gè)參數(shù)隨意起個(gè)名
? },

組件內(nèi)取值

//在計(jì)算屬性中取值,js直接這樣寫(xiě)拿到值,html用直接xxx使用
?computed: { ? ?
? ? value() {
? ? ? return this.$store.state.xxx;
? ? }
? },

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

溧水县| 海晏县| 阿合奇县| 龙门县| 鸡泽县| 常山县| 通州市| 曲沃县| 平罗县| 鲜城| 金溪县| 措美县| 苏州市| 永宁县| 武冈市| 祁东县| 阳原县| 深泽县| 松桃| 巨鹿县| 内丘县| 贵溪市| 原平市| 连州市| 建阳市| 苍溪县| 驻马店市| 湖州市| 神农架林区| 衡南县| 石河子市| 年辖:市辖区| 吴旗县| 泽库县| 昌吉市| 始兴县| 翼城县| 邻水| 马边| 沁水县| 深水埗区|