模擬Vuex外掛程式

2021-10-04 14:33:21 字數 2463 閱讀 2334

需求

vuex是乙個幫助我們集中管理vue元件狀態的狀態管理外掛程式,我們將模擬它的state、mutation、action、getter。在元件內,我們可以通過vm.sto

re.c

ommi

t()來

更改st

ate,

或者使用

vm

.store.commit()來更改state,或者使用vm.

store.

comm

it()

來更改s

tate

,或者使

用vm.

store.dispatch()來非同步地改變state,同時阻止使用者通過vm.sto

re.s

tate

=′′這

種方式直

接改變s

tate

;使用者可

以使

用store.state=''這種方式直接改變state;使用者可以使用

store.

stat

e=′′

這種方式

直接改變

stat

e;使用者

可以使用

store.getters()來獲取state,當state改變時,獲取的值也做相應的改變。

實現首先,我們建立乙個簡單的store

import vue from

'vue'

import vuex from

'./kstorevuex.js'

vue.

use(vuex)

export

default

newvuex.store(,

mutations:},

actions:

,2000)}

},getters:}}

)

和vue-router一樣,我們要實現乙個store類和install方法,但是注意我們使用的時候是new vuex.store,所以,kvuex檔案應該是這樣的

let vue

class

store

}function

install

(_vue)

export

default

同樣的,我們要在install方法中將$store掛到vue原型鏈上,方便元件來呼叫。

function

install

(_vue)}}

)}

在class store中,我們要實現getter、commit、dispatch這三個方法;和仿vue-router不同的是,我們建立響應式資料的方式有所變化,值得注意的一點是利用computed選項實現getter。

class

store

// 利用computed選項實現getter,避免this指向混亂,使用乙個變數儲存this

const store =

this

let computed =

// 遍歷vuex的getter配置項

object.

keys

(store._wrapgetters)

.foreach

(key =>

// 設定store.getter唯讀

object.

defineproperty

(store.getters, key,})

})// 建立乙個響應式的$$state屬性,不使用definereactive()方法是因為實現getter方法需要使用computed選項,state前面加兩個$可以不讓vue自動**$$state

this

._vm =

newvue(,

computed

})// 將commit和dispatch從this中解構出來

const

= store

this

.commit

=function

(type, payload)

this

.dispatch

=function

(type, payload)

}// 使用getter,返回state

getstate()

// 阻止使用者直接修改state

setstate

(val)

// 建立乙個commit方法和dispatch方法

commit

(type, payload)

entry

(this

.state, payload)

}dispatch

(type, payload)

entry

(this

.state, payload)

}}

如何使用vuex外掛程式

一.使用前需要做的事情 1.理解什麼是vuex?學習到vue之後最常見的就是使用父子元件傳值的問題,但是當我們在進行乙個較大型的新專案開發時候,元件關係較為複雜如果還堅持使用父子元件的話將會異常繁瑣,再加上有些資料需要幾個元件同時共享,所以這時候我們採用了vuex vue狀態管理模式 2.安裝vue...

使用vuex外掛程式方法

1.元件訪問state中資料的第一種方法 1 從vuex中按需引入mapstate函式 import from vuex 2 將全域性資料對映為當前元件computed計算屬性 computed 元件訪問state中資料的第二種方法 this.store.state.count 2.只能通過muta...

vue js模擬日曆外掛程式

今天要實現的功能就是一下這個功能 好了廢話不多說了 直接上 了 週日th 周一th 周二th 週三th 周四th 周五th 週六th tr thead v for a,index of calender.length 7 v for i of 7 class td tr tbody table di...