初次看到這個(gè)模塊方式,感覺很是新奇,之前的vuex狀態(tài)樹使用方法用的也有些膩了,就想來實(shí)踐一發(fā)新的東西
廢話不多說,直接進(jìn)入正題
Vuex狀態(tài)樹-模塊方式官方文檔解讀
狀態(tài)樹還可以拆分成為模塊,store 目錄下的每個(gè) .js 文件會(huì)被轉(zhuǎn)換成為狀態(tài)樹指定命名的子模塊
照貓畫虎
// store/index.jsexport const state = () => ({ num: 0}) export const mutations = { increment (state) { state.num ++ }, decrement (state) { state.num -- }} // store/plus.jsexport const state = () => ({ plusNum: 1}) export const mutations = { plus (state) { state.plusNum ++ }} // store/minus.jsexport const state = () => ({ minusNum: 10}) export const mutations = { minus (state) { state.minusNum -- }} // pages/store.vue<template> <section class="container"> <table> <tr> <td colspan=4>vuex狀態(tài)樹使用</td> </tr> <tr> <td>頁(yè)內(nèi)數(shù)據(jù)</td> <td>index.js</td> <td>plus.js</td> <td>minus.js</td> </tr> <tr> <td>{{ count }}</td> <td>{{ $store.state.num }}</td> <td>{{ $store.state.plus.plusNum }}</td> <td>{{ $store.state.minus.minusNum }}</td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </table> </section></template>跑一下,唷!報(bào)錯(cuò)了,我說同學(xué)們啊,我寫的真的沒有錯(cuò)!!!
好吧,報(bào)錯(cuò)內(nèi)容:[Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.
意思是我客戶端和vue SSR生成的DOM不一樣,客戶端不也是SSR生成的,這是個(gè)問題,有知道的大佬,希望可以告訴我。
不過這個(gè)問題我倒是解決了,雖然不知道問什么-_-!,把那一大堆的tr標(biāo)簽都放到tbody里面就OK了
跑起來,沒問題,按示例的寫法,這樣成功拿到了state的數(shù)據(jù)
接著試試mutation的方法
<tr class="mutation-fun"> <td @click="count ++">count ++</td> <td @click="$store.commit('increment')">increment</td> <td @click="$store.commit('plus')">plus</td> <td @click="$store.commit('minus')">minus</td></tr>報(bào)錯(cuò):[vuex] unknown mutation type: plus
修改下:
<tr class="mutation-fun"> <td @click="count ++">count ++</td> <td @click="$store.commit('increment')">increment</td> <td @click="$store.commit('plus/plus')">plus/plus</td> <td @click="$store.commit('minus/minus')">minus/minus</td></tr>搞定~
自己先小結(jié)下這個(gè)模塊怎么用的吧
nuxt很貼心的幫我們省去了返回Vuex實(shí)例的代碼,我們可以不用去寫了
只有store文件夾下的index.js是一級(jí)的vuex狀態(tài),其他的js文件都是二級(jí)的狀態(tài)樹。(能不能有三級(jí)的我不知道,不過感覺沒必要,哈哈哈!!)
每個(gè)狀態(tài)樹文件都可以包含state,mutation,action
使用二級(jí)狀態(tài)樹的state用: $store.state.文件名.變量名
使用二級(jí)狀態(tài)樹的mutation用: $store.commit(‘文件名/變量名')
使用二級(jí)狀態(tài)樹的action用: $store.dispatch(‘文件名/變量名')
官方示例沒有提到的
二級(jí)狀態(tài)樹能調(diào)用一級(jí)狀態(tài)樹的state和mutation以及action嗎?
我們來給plus.js增加一個(gè)修改index.js中的state的方法plusIndex
export const state = () => ({ plusNum: 1}) export const mutations = { plus (state) { state.plusNum ++ }, plusIndex (state) { state.num ++ console.log('點(diǎn)擊遞增index的num') }}去試著調(diào)用了一下,文本打印出來了,也沒有報(bào)錯(cuò),但是完全獲取不到index中的num哇~~
這次聰明點(diǎn)兒,我直接把state打印出來:
export const state = () => ({ plusNum: 1}) export const mutations = { plus (state) { state.plusNum ++ }, plusIndex (state) { console.log('state: ', state) state.num ++ }}跑一下試試: 結(jié)果有點(diǎn)兒讓人想哭:state: {num: NaN, plusNum: 1}。再看看頁(yè)面上index.js對(duì)應(yīng)的num依然是0,這就說明我們這里的num不是index.js里的num,而是下面state ‘.'(點(diǎn))出來的num,并且沒有給初始值就執(zhí)行了一次 ++ ,所以值為NaN
到這里,我已經(jīng)大概猜測(cè)到了這里的彎彎繞是怎么回事兒了 主站蜘蛛池模板: 永寿县| 通许县| 微山县| 随州市| 泉州市| 西乌珠穆沁旗| 永靖县| 北流市| 玉龙| 东平县| 琼海市| 乃东县| 桐梓县| 安仁县| 临安市| 东辽县| 无棣县| 综艺| 青神县| 海淀区| 广州市| 玛曲县| 怀宁县| 微山县| 昌乐县| 长武县| 云南省| 巴林右旗| 张北县| 洛隆县| 岫岩| 黎城县| 马关县| 栾川县| 曲周县| 麻栗坡县| 沈阳市| 翼城县| 手机| 元朗区| 墨脱县|