国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue學(xué)習(xí)日記(四)——Vue狀態(tài)管理vuex

zilu / 1811人閱讀

摘要:說實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺得沒有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說法就是是一個(gè)專為應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

前言

先說句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁面,不使用vuex也是完全可以的。

說實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解vuex,甚至覺得沒有使用它我也可以。但是直到我在項(xiàng)目碰到下面這些問題:

當(dāng)路由切換的時(shí)候,原本路由的數(shù)據(jù)太多,傳遞過去太麻煩。

有些數(shù)據(jù)是多個(gè)路由需要用到的,那我就需要從后臺(tái)獲取多次數(shù)據(jù)

當(dāng)然,這些問題都可以解決,就是在實(shí)例化vue對(duì)象的時(shí)候,就將這些數(shù)據(jù)綁定在window對(duì)象上面。但是我們也不得不設(shè)想:

萬一數(shù)據(jù)太多了,那么可閱讀性是不是會(huì)下降

如果只是修改多帶帶的數(shù)據(jù),是不是所有的頁面都可以更新

對(duì)于第一個(gè)問題,答案是肯定的,雖然說,我們現(xiàn)在也可以用模塊化的思想去使可閱讀性更加好,但是沒有一個(gè)規(guī)范,對(duì)于剛?cè)胧猪?xiàng)目的總是難以理解。

對(duì)于第二個(gè)問題,當(dāng)你頁面少的時(shí)候,是不會(huì)出現(xiàn)這樣的問題的,但是如果頁面多了,你就會(huì)發(fā)現(xiàn),當(dāng)你把window.$data里面的數(shù)據(jù)更新的時(shí)候,所有頁面的計(jì)算屬性都會(huì)失效,就是你無論怎么修改數(shù)據(jù),頁面都不會(huì)更新數(shù)據(jù)。

這時(shí)候,就需要用到我們的vuex了。

vuex介紹
那么vuex 到底是什么?

引用官網(wǎng)的說法就是Vuex是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

是不是還是有點(diǎn)難以理解,其實(shí)簡(jiǎn)單的說vuex就是把這個(gè)項(xiàng)目的所有數(shù)據(jù)都存儲(chǔ)在一個(gè)地方,方便修改和獲取數(shù)據(jù)

例如,我們從下面這張圖給大家先簡(jiǎn)單的分析一下

在這張圖片里面我們很明顯可以看到三個(gè)部分

Vue Components 表示vue里面的組件

Backend API 后臺(tái)API

vuex 組件里面的數(shù)據(jù)管理

我們可以生動(dòng)形象的理解,如果說Vuex是一個(gè)倉庫,那么么Vue Components就就是售貨者,負(fù)責(zé)把倉庫里面的東西展現(xiàn)出來,Backend API就相當(dāng)于入貨的人,負(fù)責(zé)將貨物買進(jìn)來(也就是后臺(tái)返回?cái)?shù)據(jù)給前端,保存在vuex里面)。而vuex就是倉庫,這個(gè)倉庫里面有貨物state,有管理貨物進(jìn)出的Muations

引用vuex

在說state之前,我們可以先在我們vue項(xiàng)目引用vuex

npm install vuex

然后在我們的src目錄下新建一個(gè)store的文件夾,在store文件夾里面新建一個(gè)index.js的文件

// ~/src/store/index.js
import Vue from "Vue"
import Vuex from "Vuex"

// 在這里聲明實(shí)例一個(gè)Vue 去引用Vuex狀態(tài)管理插件
// 這樣就可以減少在main.js里面的代碼量了
Vue.use(Vuex)

// 返回store實(shí)例對(duì)象
export default new Vuex.Store({
})

這里說一下吧,這里Store其實(shí)就是相當(dāng)vuex實(shí)例化的一個(gè)倉庫。

data替代者state
為什么說state是data的替代者呢?

很容易理解,就是講組件里面的局部參數(shù),改成了一個(gè)可以全局使用的參數(shù)state,例如,我們?cè)趍e.vue組件引用的數(shù)據(jù)todo。

那么我們可以在store里面這樣實(shí)例化它出來

// ~/src/store/index.js

// ...
export default new Vuex.Store({
  state: {
    todo: []
  }
})

那么,我們?cè)诮M件里面怎么使用這個(gè)數(shù)據(jù)呢?

// me.vue組件文件

// ...

// ...

是不是很簡(jiǎn)單,但是我們不可能每次使用這個(gè)值都要獲取一次吧,這些vue團(tuán)隊(duì)也都想好了,我們可以通過計(jì)算屬性來獲取state里面的數(shù)據(jù)。

// ...

// ...

相當(dāng)于

// ...

// ...
計(jì)算屬性Getter

有時(shí)候我們會(huì)需要對(duì)state的數(shù)據(jù)進(jìn)行一些過濾操作,例如我們只要在todo里面大于10的數(shù)字,如果是用computed的話,我們就需要使用filter函數(shù),為了更加簡(jiǎn)便,vuex也給我們提供了計(jì)算屬性getter。

我們可以修改我們的~/src/store/index文件

// ...
export default new Vuex.Store({
  state: {
    todo: []
  },
  getters: {
    todo: state => state.todo.filter(number => number > 10)
  }
})

然后在me.vue里面引用

// ...

// ...

這樣就可以簡(jiǎn)單拿到大于10的todo數(shù)據(jù)了

修改state的Mutation
我們說了怎么獲取數(shù)據(jù),但是我們應(yīng)該怎么修改數(shù)據(jù)呢,是不是直接賦值給數(shù)據(jù)就可以了呢?

答案當(dāng)然不是,vuex規(guī)定了,我們只能用Mutation來進(jìn)行修改數(shù)據(jù),那么,我們?cè)趺催M(jìn)行修改數(shù)據(jù)呢?
修改我們的~/src/store/index.js

// ...
export default new Vuex.Store({
  state: {
    todo: []
  },
  getters: {
    todo: state => state.todo.filter(number => number > 10)
  },
  mutations: {
    revsiseTode: (state, oneTodo) => (state.todo = oneTodo) // 修改state的值
  }
})

然后在我們的me.vue組件里面修改

// ...
// 在多帶帶構(gòu)建的版本中輔助函數(shù)為 Vuex.mapGetters
import { mapGetters } from "vuex"
// 在多帶帶構(gòu)建的版本中輔助函數(shù)為 Vuex.mapMutations
import { mapMutations } from "vuex"

export default {
  computed: {
    ...mapGetters([
      // 映射 this.todo 為 store.state.todo
      "todo"
    ])
  },
  method: {
    ...mapMutations(
      [
        // 將 `this.revsiseTode()` 映射為 `this.$store.commit("revsiseTode")`
        // 如果想傳遞參數(shù)可以使用this.$store.commit("revsiseTode", oneTode)
        // 或者Action
        "revsiseTode" 
      ]
    )
  }
}
Action的使用

寫了這么久,終于到了Action的出場(chǎng)了,其實(shí)不管怎么說,Action主要是為了與后臺(tái)交互而使用的屬性,這里,我就假設(shè)todo的數(shù)據(jù)在路由/me/gettodo里面能夠獲取,因此,修改~/store/index.js

// ...
export default new Vuex.Store({
  state: {
    todo: []
  },
  getters: {
    todo: state => state.todo.filter(number => number > 10)
  },
  mutations: {
    revsiseTode: (state, oneTodo) => (state.todo = oneTodo) // 修改state的值
  },
  actions: {
    getTodo: context => Vue.http.get("/me/gettodo", (res) => {
      context.commit("revsiseTode", res.body.todo)
    })
  }
})

然后就可以通過觸發(fā)我們的actions來提交mutations去修改state的數(shù)據(jù)了,在me.vue修改

// ...
// 在多帶帶構(gòu)建的版本中輔助函數(shù)為 Vuex.mapGetters
import { mapGetters } from "vuex"
// 在多帶帶構(gòu)建的版本中輔助函數(shù)為 Vuex.mapMutations
import { mapActions } from "vuex"

export default {
  computed: {
    ...mapGetters([
      // 映射 this.todo 為 store.state.todo
      "todo"
    ])
  },
  method: {
    ...mapActions(
      [
        "reviseTodo", // 將 `this.reviseTodo()` 映射為 `this.$store.dispatch("reviseTodo")
      ]
    )
  }
}
// ...
vuex目錄結(jié)構(gòu)

上面主要只是簡(jiǎn)單的講了一下vuex的使用,也只是講了一部分,不過相信看了這里之后再去官網(wǎng)就會(huì)有更深的理解。當(dāng)然這些都是簡(jiǎn)單的使用,如果想把vuex運(yùn)用到項(xiàng)目,必須把他們模塊化更加好看,vuex官網(wǎng)也為我們提供了規(guī)范的項(xiàng)目目錄結(jié)構(gòu),我這里就不多啰嗦幾句了。

總結(jié)

vuex其實(shí)不難,我一開始也以為很難一直學(xué)不會(huì),只要多使用就會(huì)覺得,其實(shí)也就只是別人都封裝好了的方法,我們?nèi)ナ褂眠@個(gè)簡(jiǎn)便的倉庫就行了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107190.html

相關(guān)文章

  • Vue學(xué)習(xí)日記)——Vue狀態(tài)管理vuex

    摘要:說實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺得沒有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說法就是是一個(gè)專為應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。 前言 先說句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁面,不使用vuex也是完全可以的。 說實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解v...

    fai1017 評(píng)論0 收藏0
  • Vue學(xué)習(xí)日記)——Vue狀態(tài)管理vuex

    摘要:說實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺得沒有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說法就是是一個(gè)專為應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。 前言 先說句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁面,不使用vuex也是完全可以的。 說實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解v...

    fjcgreat 評(píng)論0 收藏0
  • Vue學(xué)習(xí)日記(一)——Vue介紹

    摘要:的核心庫只關(guān)注視圖層,并且非常容易學(xué)習(xí),非常容易與其它庫或已有項(xiàng)目整合。的目標(biāo)是通過盡可能簡(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)過看了vue,vuex,vue-route...

    王晗 評(píng)論0 收藏0
  • Vue學(xué)習(xí)日記(一)——Vue介紹

    摘要:的核心庫只關(guān)注視圖層,并且非常容易學(xué)習(xí),非常容易與其它庫或已有項(xiàng)目整合。的目標(biāo)是通過盡可能簡(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)過看了vue,vuex,vue-route...

    MasonEast 評(píng)論0 收藏0
  • Vue學(xué)習(xí)日記(三)——Vue路由管理vue-router

    摘要:重定向可以實(shí)現(xiàn)某些需要根據(jù)特定邏輯改變頁面原本路由的需求,例如簡(jiǎn)單的未登錄狀態(tài)下的頁面訪問個(gè)人信息路由時(shí)應(yīng)該重定向到登錄路由頁面。 前言 為了給讀者更好的體驗(yàn),去理解vue-router和下一篇介紹vuex,決定還是來一個(gè)實(shí)戰(zhàn)教程來帶大家更加的去深入理解vue-router,在這之前,讀者先自行了解和去官網(wǎng)下載npm和node,附:npm官網(wǎng) 項(xiàng)目構(gòu)建 這里我采用vue-cli+web...

    iKcamp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<