摘要:官方文檔對(duì)的解讀是是一個(gè)專為應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。而就是為了解決這樣的問(wèn)題,把組件的共享狀態(tài)抽取出來(lái),以一個(gè)全局單例模式管理。我們還可以傳入?yún)?shù)傳入一個(gè)對(duì)象可以修改中的狀態(tài),但是并不是說(shuō)隨隨便便修改的比如說(shuō)
老規(guī)矩先安裝
npm install vuex --save
在看下面內(nèi)容之前 你應(yīng)該大概的看了一邊vuex官方的文檔對(duì)vuex有個(gè)大概對(duì)了解
首先
vuex 是屬于vue中的什么,它在項(xiàng)目中扮演著一個(gè)什么樣的角色,起到什么作用,在項(xiàng)目中我是否要用到vuex。
官方文檔對(duì)vuex的解讀是:Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。
如果你是在開(kāi)發(fā)一個(gè)大型的應(yīng)用程序,組件與組件之間,兄弟組件之間,或者說(shuō)多層嵌套組件之間,你是無(wú)法傳遞數(shù)據(jù)的。子父組件之間,也只是說(shuō)通過(guò)事件保持?jǐn)?shù)據(jù)的一致性,也是很繁瑣的,會(huì)變得很不好管理。而vuex就是為了解決這樣的問(wèn)題,把組件的共享狀態(tài)抽取出來(lái),以一個(gè)全局單例模式管理。組件樹(shù)構(gòu)成了一個(gè)巨大的“視圖”,不管在樹(shù)的哪個(gè)位置,任何組件都能獲取狀態(tài)或者觸發(fā)行為,而且代碼將會(huì)變得更結(jié)構(gòu)化且易維護(hù)。
新建一個(gè)最簡(jiǎn)單的store
store.js
import Vue from vue
import Vuex from vuex
Vue.use(Vuex)
export default new Vuex.Store({
state: {
count: 0,
me: {
name: huangenai,
age: 22,
sex: 女
},
list: [{name: hea, age: 22}, {name: cpq, age: 23}]
},
mutations: {
increment (state) {
state.count++
}
}
})
main.js
import store from ./store.js new Vue({ el: #app, router, store,//加這個(gè) components: { App }, template: <App/> })
驅(qū)動(dòng)應(yīng)用的數(shù)據(jù)源,組件之間共享的狀態(tài)。
上面代碼中的 count 就是一個(gè)共享的數(shù)據(jù),me 也是一個(gè)共享的數(shù)據(jù)對(duì)象。
在組件中獲得state 中的count
this.$store.state.count
newvue.vue
<template> <div> new vue page <p>{{count}}p> div> template> <script> export default { name: newvue, data () { return { } }, computed: { count () { return this.$store.state.count } } } script> <style scoped> style>
為什么要寫在computed 里面呢,而不是寫在data里面,因?yàn)楫?dāng)state.count 變化的時(shí)候, 都會(huì)重新求取計(jì)算屬性,并且觸發(fā)更新相關(guān)聯(lián)的 DOM,如果你不理解可以先去看看computed
當(dāng)一個(gè)組件要引用到多個(gè)狀態(tài)的時(shí)候 ,一個(gè)個(gè)寫是不是很累。不用擔(dān)心,我們有mapState
輔助函數(shù)幫助我們生成計(jì)算屬性。
在組件中引用
import { mapState } from vuex
<template> <div> <p>{{count}}p> <p>{{countPlusLocalState}}p> <p>sex: {{sex}}p> <p>age: {{myAge}}p> <p>name: {{name}}p> div> template> <script> import { mapState } from vuex export default { name: newvue, data () { return { localCount: 1 } }, computed: { ...mapState({ // 箭頭函數(shù)可使代碼更簡(jiǎn)練 sex: state => state.me.sex, myAge: state => state.me.age, name: state => state.me.name, // 傳字符串參數(shù) age 等同于 `state => state.age` count: count, // 為了能夠使用 `this` 獲取局部狀態(tài),必須使用常規(guī)函數(shù) countPlusLocalState (state) { return state.count + this.localCount } }) } } script> <style scoped> style>
假設(shè)computed 里面還有別的數(shù)據(jù),因?yàn)閙apstate返回來(lái)的是一個(gè)對(duì)象所以我們這樣寫可以將數(shù)據(jù)混入
computed: {
localComputed () { /* ... */ },
// 使用對(duì)象展開(kāi)運(yùn)算符將此對(duì)象混入到外部對(duì)象中
...mapState({
// ...
})
}
你說(shuō)你想修改state的值,this.$store.state.count = 1 這樣可不可以 no no no.... 所以就有了Mutation。
想要修改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation。
在上面代碼我們新建一個(gè)store里面下的 有一個(gè)increment,就可以實(shí)現(xiàn)修改state里面的count
export default new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count ++
}
}
})
那么如何調(diào)用increment呢??
調(diào)用 this.$store.commit(type) 類型叫increment
的 mutation。
this.$store.commit(increment)
我們還可以傳入?yún)?shù)
// ...
mutations: {
increment (state, n) {
this.$state.count = n
}
}
store.commit(increment, 10)
傳入一個(gè)對(duì)象
mutations: {
increment (state, data) {
state.count += data.count
}
}
store.commit(increment, {
count: 10
})
mutations可以修改store中的狀態(tài),但是并不是說(shuō)隨隨便便修改的,比如說(shuō)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/1731.html
摘要:目錄,前言,,例子,直接調(diào)用,將指向另一個(gè)對(duì)象,傳遞參數(shù),,例子,直接調(diào)用,將指向另一個(gè)對(duì)象,傳遞參數(shù),合并數(shù)組,,例子,直接調(diào)用,將指向另一個(gè)對(duì)象,傳遞參數(shù),中裝飾器使用,總結(jié),相同點(diǎn),不同點(diǎn),前言,前言和在函數(shù)式編程時(shí)候非常有用,本? 目錄 1,前言 1,call 1.1,例子 1.2,直接調(diào)用 1.3,將this指向另一個(gè)對(duì)象 1...
摘要:哪吒別人的看法都是狗屁,你是誰(shuí)只有你自己說(shuō)了才算,這是爹教我的道理。哪吒去他個(gè)鳥命我命由我,不由天是魔是仙,我自己決定哪吒白白搭上一條人命,你傻不傻敖丙不傻誰(shuí)和你做朋友太乙真人人是否能夠改變命運(yùn),我不曉得。我只曉得,不認(rèn)命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出處 查看github最新的Vue...
摘要:的核心庫(kù)只關(guān)注視圖層,并且非常容易學(xué)習(xí),非常容易與其它庫(kù)或已有項(xiàng)目整合。的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。并不是框架,只是和他旁邊的生態(tài)環(huán)境組成了一個(gè)框架,下面,貼一個(gè)官方的漸進(jìn)式框架介紹圖吧,方便理解。 前言 本人學(xué)習(xí)了一段時(shí)間的vue,并嘗試寫了一些小Demo之后,將vue投入了幾個(gè)項(xiàng)目之后,一直在邊學(xué)習(xí)邊使用,經(jīng)過(guò)看了vue,vuex,vue-route...
摘要:的核心庫(kù)只關(guān)注視圖層,并且非常容易學(xué)習(xí),非常容易與其它庫(kù)或已有項(xiàng)目整合。的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。并不是框架,只是和他旁邊的生態(tài)環(huán)境組成了一個(gè)框架,下面,貼一個(gè)官方的漸進(jìn)式框架介紹圖吧,方便理解。 前言 本人學(xué)習(xí)了一段時(shí)間的vue,并嘗試寫了一些小Demo之后,將vue投入了幾個(gè)項(xiàng)目之后,一直在邊學(xué)習(xí)邊使用,經(jīng)過(guò)看了vue,vuex,vue-route...
摘要:引言兩個(gè)月前用全家桶實(shí)現(xiàn)過(guò)一次酷狗音樂(lè),最近又用全家桶重構(gòu)了下,最終成果和的實(shí)現(xiàn)基本一致,放個(gè)圖手機(jī)預(yù)覽戳版本版本。的行為結(jié)構(gòu)表現(xiàn)分離,很明顯,而的分離雖然不是很明顯,但實(shí)際上也是有的。發(fā)送指令,最終會(huì)到里合并數(shù)據(jù),與中的類似。 引言 兩個(gè)月前用 Vue 全家桶實(shí)現(xiàn)過(guò)一次 酷狗音樂(lè),最近又用 React 全家桶重構(gòu)了下,最終成果和 Vue的實(shí)現(xiàn)基本一致,放個(gè)圖: showImg(htt...
閱讀 844·2023-04-25 19:43
閱讀 4109·2021-11-30 14:52
閱讀 3919·2021-11-30 14:52
閱讀 4024·2021-11-29 11:00
閱讀 3917·2021-11-29 11:00
閱讀 4035·2021-11-29 11:00
閱讀 3752·2021-11-29 11:00
閱讀 6597·2021-11-29 11:00