欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

nuxt踩坑之Vuex狀態(tài)樹(shù)的模塊方式怎么用

這篇文章主要介紹了nuxt踩坑之Vuex狀態(tài)樹(shù)的模塊方式怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)邵武,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

Vuex狀態(tài)樹(shù)-模塊方式官方文檔解讀

狀態(tài)樹(shù)還可以拆分成為模塊,store 目錄下的每個(gè) .js 文件會(huì)被轉(zhuǎn)換成為狀態(tài)樹(shù)指定命名的子模塊

  1. 這句話啊,看了半天,我都沒(méi)繞出來(lái)。之前一直用的是store目錄下文件為:index.js、state.js、mutations.js、actions.js。后三個(gè)是index.js的子模塊,你說(shuō)這每個(gè)js文件都是一個(gè)模塊?懵逼一分鐘

  2. 繼續(xù)往下:使用狀態(tài)樹(shù)模塊化的方式,store/index.js 不需要返回 Vuex.Store 實(shí)例,而應(yīng)該直接將 state、mutations 和 actions 暴露出來(lái)。 到這里我雖然還懵逼著,但是轉(zhuǎn)念一想,nuxt還有這操作,都不用我們自己辛辛苦苦寫(xiě)export default store = () => new Vuex.Store({}) 了,倒也真的省事兒呢

  3. 還是繼續(xù)看例子吧,官方給的這個(gè),看了一遍沒(méi)看懂(笨小孩的世界真滴難),你這index.js不是Vuex默認(rèn)的store文件么,再來(lái)一todos.js,同樣暴露出去的對(duì)象,不應(yīng)該是index.js同級(jí)的么

  4. 重點(diǎn)來(lái)了,看不會(huì)不要緊,照貓畫(huà)虎我還是會(huì)滴~

照貓畫(huà)虎

// store/index.js
export const state = () => ({
 num: 0
})
 
export const mutations = {
 increment (state) {
  state.num ++
 },
 decrement (state) {
  state.num --
 }
}
 
 
// store/plus.js
export const state = () => ({
 plusNum: 1
})
 
export const mutations = {
 plus (state) {
  state.plusNum ++
 }
}
 
// store/minus.js
export 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)樹(shù)使用</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ò)了,我說(shuō)同學(xué)們啊,我寫(xiě)的真的沒(méi)有錯(cuò)?。。?/p>

好吧,報(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è)問(wèn)題,有知道的大佬,希望可以告訴我。

不過(guò)這個(gè)問(wèn)題我倒是解決了,雖然不知道問(wèn)什么-_-!,把那一大堆的tr標(biāo)簽都放到tbody里面就OK了

跑起來(lái),沒(méi)問(wèn)題,按示例的寫(xiě)法,這樣成功拿到了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í)例的代碼,我們可以不用去寫(xiě)了
只有store文件夾下的index.js是一級(jí)的vuex狀態(tài),其他的js文件都是二級(jí)的狀態(tài)樹(shù)。(能不能有三級(jí)的我不知道,不過(guò)感覺(jué)沒(méi)必要,哈哈哈?。。?/p>

每個(gè)狀態(tài)樹(shù)文件都可以包含state,mutation,action

使用二級(jí)狀態(tài)樹(shù)的state用: $store.state.文件名.變量名

使用二級(jí)狀態(tài)樹(shù)的mutation用: $store.commit(‘文件名/變量名')

使用二級(jí)狀態(tài)樹(shù)的action用: $store.dispatch(‘文件名/變量名')

官方示例沒(méi)有提到的

二級(jí)狀態(tài)樹(shù)能調(diào)用一級(jí)狀態(tài)樹(shù)的state和mutation以及action嗎?

我們來(lái)給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)用了一下,文本打印出來(lái)了,也沒(méi)有報(bào)錯(cuò),但是完全獲取不到index中的num哇~~

這次聰明點(diǎn)兒,我直接把state打印出來(lái):

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,這就說(shuō)明我們這里的num不是index.js里的num,而是下面state ‘.'(點(diǎn))出來(lái)的num,并且沒(méi)有給初始值就執(zhí)行了一次 ++ ,所以值為NaN

到這里,我已經(jīng)大概猜測(cè)到了這里的彎彎繞是怎么回事兒了 –> 模塊兒的作用域是本文件內(nèi)。但編程不是靠猜的,要用實(shí)踐證明的才是對(duì)的,下面在深究這個(gè)問(wèn)題

反過(guò)來(lái),一級(jí)狀態(tài)樹(shù)能調(diào)用二級(jí)狀態(tài)樹(shù)的state和mutation以及action嗎?

這里的情況跟上面一樣,既然我們的這個(gè)store是模塊方式生成的,那就要遵循模塊化的規(guī)范,變量作用域只能在文件內(nèi)

通過(guò)模塊化編程規(guī)范來(lái)獲取一級(jí)狀態(tài)樹(shù)的state

先把index.js引過(guò)來(lái),因?yàn)椴环判囊眠^(guò)來(lái)的還是不是原來(lái)那個(gè)index.js,所以把它打印出來(lái)看看

const indexVuex = require('./index.js')
console.log('indexVuex: ', indexVuex)

這下不就炸了嘛,我引過(guò)來(lái)的居然是一個(gè)空的vuex狀態(tài)樹(shù)?。。?nèi)容長(zhǎng)這樣子

{
  mutation: {},
  modules: {
    plus: {
      mutation: {},
      namespaced: true
    },
    minus: {
      mutation: {},
      namespaced: true
    }
  },
  namespaced: true
}

好吧,我這個(gè)用模塊化的方式來(lái)使用其他文件內(nèi)的變量的想法也是泡湯了

最后的讓步,我在組件中調(diào)用狀態(tài)樹(shù)時(shí)再去用二級(jí)狀態(tài)樹(shù)的方法修改一級(jí)狀態(tài)樹(shù)的state,先試試:

// plus.js
export const state = () => ({
 plusNum: 1
})
 
export const mutations = {
 plus (state) {
  state.plusNum ++
 },
 plusIndex (state, meio) {
  meio ++
  console.log('meio: ', meio)
 }
}
 
// 調(diào)用:
<td @click="$store.commit('plus/plusIndex', $store.state.num)">遞增index的num</td>

點(diǎn)擊后,依然沒(méi)能修改index.js中的num,查看打印結(jié)果中一直都是1,也就是說(shuō)我們傳進(jìn)去的是基本數(shù)據(jù)類型的0~~

那修改一下,我們傳進(jìn)去一個(gè)引用數(shù)據(jù)類型的看看可以不

// plus.js
export const state = () => ({
 plusNum: 1
})
 
export const mutations = {
 plus (state) {
  state.plusNum ++
 },
 plusIndex (state, meio) {
  meio.num ++
  console.log('meio: ', meio.num)
 }
}
 
// 調(diào)用:
<td @click="$store.commit('plus/plusIndex', $store.state)">遞增index的num</td>

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“nuxt踩坑之Vuex狀態(tài)樹(shù)的模塊方式怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

本文題目:nuxt踩坑之Vuex狀態(tài)樹(shù)的模塊方式怎么用
當(dāng)前路徑:http://aaarwkj.com/article6/gjogig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、企業(yè)建站、響應(yīng)式網(wǎng)站、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
欧美亚洲午夜一二综合| 精精国产xxxx视频在线不卡| 成人永久免费播放平台| 亚洲天堂福利视频网站| 国产欧美日韩国产精品| 亚洲欧洲一区二区免费| 中文字幕日产乱码一二三区| 日本又色又爽又黄又高潮| 精品国产91乱码一区二区三区| 亚洲黄香蕉视频免费看| 蜜桃av一区二区三区在线| 日韩欧美亚洲国产一区久久精品| 中文字幕人妻熟女人妻| 欧美精品蜜桃激情一区久久| 天堂av免费资源在线观看| 国产成人综合精品久久| 18禁视频免费无遮挡| 周妍希浴室视频色哟哟| 日本成人午夜福利电影| 五月婷婷av综合激情| 日韩av专区在线免费观看| 欧美一区二区三区人妻熟妇| 国内精品久久大型新型| 欧美日韩在线不卡一区| 国产精品欧美日韩一区| 日韩美女搞黄色的网站| 蜜臀视频在线观看免费| 亚洲中文字幕在线不卡| 久久精品国产一区二区三区91| 国产内射一级一片高清视频观看| 自拍偷拍亚洲精品第一页| 亚洲欧美精品成人一区| 超碰在线免费视频97| 成年人免费在线观看国产| 国产av高清亚洲精品高清二部 | 国产精品亚洲精品欧美| 欧美经典三级一区二区三区| 精品人妻中文字幕一区有码| 国产精品亚洲精品欧美| 日本一区二区欧美亚洲国产| 亚洲精品人妻av在线|