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

nuxt踩坑之Vuex狀態(tài)樹的模塊方式使用詳解

 更新時間:2019年09月06日 14:15:46   作者:ShiYadong_  
這篇文章主要介紹了nuxt踩坑之Vuex狀態(tài)樹的模塊方式使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

初次看到這個模塊方式,感覺很是新奇,之前的vuex狀態(tài)樹使用方法用的也有些膩了,就想來實踐一發(fā)新的東西

廢話不多說,直接進入正題

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

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

  1. 這句話啊,看了半天,我都沒繞出來。之前一直用的是store目錄下文件為:index.js、state.js、mutations.js、actions.js。后三個是index.js的子模塊,你說這每個js文件都是一個模塊?懵逼一分鐘
  2. 繼續(xù)往下:使用狀態(tài)樹模塊化的方式,store/index.js 不需要返回 Vuex.Store 實例,而應(yīng)該直接將 state、mutations 和 actions 暴露出來。 到這里我雖然還懵逼著,但是轉(zhuǎn)念一想,nuxt還有這操作,都不用我們自己辛辛苦苦寫export default store = () => new Vuex.Store({}) 了,倒也真的省事兒呢
  3. 還是繼續(xù)看例子吧,官方給的這個,看了一遍沒看懂(笨小孩的世界真滴難),你這index.js不是Vuex默認的store文件么,再來一todos.js,同樣暴露出去的對象,不應(yīng)該是index.js同級的么
  4. 重點來了,看不會不要緊,照貓畫虎我還是會滴~

照貓畫虎

// 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)樹使用</td>
    </tr>
    <tr>
      <td>頁內(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>

跑一下,??!報錯了,我說同學(xué)們啊,我寫的真的沒有錯?。?!

好吧,報錯內(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生成的,這是個問題,有知道的大佬,希望可以告訴我。

不過這個問題我倒是解決了,雖然不知道問什么-_-!,把那一大堆的tr標簽都放到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>

報錯:[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é)下這個模塊怎么用的吧

nuxt很貼心的幫我們省去了返回Vuex實例的代碼,我們可以不用去寫了
只有store文件夾下的index.js是一級的vuex狀態(tài),其他的js文件都是二級的狀態(tài)樹。(能不能有三級的我不知道,不過感覺沒必要,哈哈哈?。。?br />

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

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

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

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

官方示例沒有提到的

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

我們來給plus.js增加一個修改index.js中的state的方法plusIndex

export const state = () => ({
 plusNum: 1
})
 
export const mutations = {
 plus (state) {
  state.plusNum ++
 },
 plusIndex (state) {
  state.num ++
  console.log('點擊遞增index的num')
 }
}

去試著調(diào)用了一下,文本打印出來了,也沒有報錯,但是完全獲取不到index中的num哇~~

這次聰明點兒,我直接把state打印出來:

export const state = () => ({
 plusNum: 1
})
 
export const mutations = {
 plus (state) {
  state.plusNum ++
 },
 plusIndex (state) {
  console.log('state: ', state)
  state.num ++
 }
}

跑一下試試: 結(jié)果有點兒讓人想哭:state: {num: NaN, plusNum: 1}。再看看頁面上index.js對應(yīng)的num依然是0,這就說明我們這里的num不是index.js里的num,而是下面state ‘.'(點)出來的num,并且沒有給初始值就執(zhí)行了一次 ++ ,所以值為NaN

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

反過來,一級狀態(tài)樹能調(diào)用二級狀態(tài)樹的state和mutation以及action嗎?

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

通過模塊化編程規(guī)范來獲取一級狀態(tài)樹的state

先把index.js引過來,因為不放心引用過來的還是不是原來那個index.js,所以把它打印出來看看

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

這下不就炸了嘛,我引過來的居然是一個空的vuex狀態(tài)樹?。。?nèi)容長這樣子

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

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

最后的讓步,我在組件中調(diào)用狀態(tài)樹時再去用二級狀態(tài)樹的方法修改一級狀態(tài)樹的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>

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

那修改一下,我們傳進去一個引用數(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>

功夫不負有心人,終于是成功了,雖然這樣很麻煩,但也起到了效果

這里經(jīng)驗證:反過來一級狀態(tài)樹調(diào)用二級狀態(tài)樹也是一樣的,代碼就不貼了

小結(jié)一下

  1. vuex狀態(tài)樹的模塊寫法,不同的文件之間不能直接引用
  2. vuex狀態(tài)樹使用模塊加載引用,得到的是一組命名空間,而不是最終生成的Vuex模塊文件
  3. 要通過b文件修改其他文件的state需要在store外部去修改

最后,小小的STAR下

情境(situation):粗略的看完一遍NUXT的官方文檔,回頭把不太清楚的東西再整理一下,這兒就卡在Vuex狀態(tài)樹的的模塊寫法上

任務(wù)(task):通過各種方法弄明白NUXT的Vuex狀態(tài)樹的模塊寫法是怎么實現(xiàn)的

行動(action):第一步,參照官方示例先讓自己的狀態(tài)樹能運行起來;第二步,與普通寫法的狀態(tài)樹寫法比較并舉一反三,看看模塊寫法和普通寫法的狀態(tài)樹在使用上有什么區(qū)別和需要注意的

結(jié)果(result):第一,學(xué)會了vuex狀態(tài)樹的模塊寫法和用法;第二,通過探索store目錄下的不同文件之間是否可以互相引用以及模塊引用來熟悉模塊方式的寫法和普通方式的區(qū)別,也找到了模塊寫法中修改其他模塊的state的方法;第三,模塊寫法的優(yōu)點:寫法簡單,結(jié)構(gòu)清晰明了,符合現(xiàn)在模塊化開發(fā);同文件(模塊)內(nèi)部類似普通寫法,可按業(yè)務(wù)模塊劃分Vuex模塊,提高開發(fā)效率;還有一點兒,我覺得這樣寫省事兒,也好看-,-| 媽媽再也不用擔心我所有的Vuex都放同一個文件中,要用時還得找半天了~~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue組件中添加@click失效問題及解決

    vue組件中添加@click失效問題及解決

    這篇文章主要介紹了vue組件中添加@click失效問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • axios post提交formdata的實例

    axios post提交formdata的實例

    下面小編就為大家分享一篇axios post提交formdata的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • elementui實現(xiàn)表格自定義排序的示例代碼

    elementui實現(xiàn)表格自定義排序的示例代碼

    本文主要介紹了elementui實現(xiàn)表格自定義排序的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解決前端調(diào)用后端接口返回200但數(shù)據(jù)返回的是html標簽

    解決前端調(diào)用后端接口返回200但數(shù)據(jù)返回的是html標簽

    這篇文章主要給大家介紹了關(guān)于如何解決前端調(diào)用后端接口返回200但數(shù)據(jù)返回的是html標簽的相關(guān)資料,文中通過圖文將解決的過程介紹的非常詳細,對同樣遇到這個問題的朋友具有一定的參考解決價值,需要的朋友可以參考下
    2024-05-05
  • 詳解Vue生命周期和MVVM框架

    詳解Vue生命周期和MVVM框架

    MVVM是Model-View-ViewModel的縮寫,MVVM是一種設(shè)計思想,這篇文章主要介紹了Vue生命周期和MVVM框架,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • vue調(diào)用原生方法交互解讀

    vue調(diào)用原生方法交互解讀

    這篇文章主要介紹了vue調(diào)用原生方法交互,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue組件設(shè)計之多列表拖拽交換排序功能實現(xiàn)

    Vue組件設(shè)計之多列表拖拽交換排序功能實現(xiàn)

    這篇文章主要介紹了Vue組件設(shè)計之多列表拖拽交換排序,常見的場景有單列表拖拽排序,多列表拖拽交換排序,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Vue組合式API的特點及使用方法

    Vue組合式API的特點及使用方法

    在Vue.js?3.0中,推出了新的組合式API,使得開發(fā)者能夠更加方便靈活地編寫Vue組件,這也是組合式?API?成為了?Vue?新的開發(fā)范式,與傳統(tǒng)的選項?API?相比,組合式?API?更加靈活、易于維護的原因,在本文中,我們將詳細介紹?Vue?組合式API的風(fēng)格及使用
    2023-06-06
  • vuejs響應(yīng)用戶事件(如點擊事件)

    vuejs響應(yīng)用戶事件(如點擊事件)

    本篇文章主要介紹了vuejs響應(yīng)用戶事件(如點擊),通過vuejs響應(yīng)用戶事件的技巧,具有一定的參考價值,有興趣的小伙伴們可以參考一下。
    2017-03-03
  • 解決Vue 通過下表修改數(shù)組,頁面不渲染的問題

    解決Vue 通過下表修改數(shù)組,頁面不渲染的問題

    下面小編就為大家分享一篇解決Vue 通過下表修改數(shù)組,頁面不渲染的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

金昌市| 孟津县| 鹤庆县| 龙岩市| 新乡市| 灵寿县| 酒泉市| 湟中县| 湟中县| 鹤峰县| 图片| 锦州市| 怀安县| 天全县| 大连市| 尼木县| 家居| 五指山市| 广汉市| 边坝县| 黄骅市| 柘荣县| 思南县| 思茅市| 兴文县| 太白县| 汾西县| 孟连| 抚顺县| 阿克苏市| 伊通| 菏泽市| 黄梅县| 大姚县| 土默特右旗| 溧水县| 临城县| 雅安市| 逊克县| 扎兰屯市| 于田县|