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

淺談Vuex的狀態(tài)管理(全家桶)

 更新時間:2017年11月04日 10:21:35   作者:拯救宇宙是我的使命  
本篇文章主要介紹了淺談Vuex狀態(tài)管理(全家桶),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。Vuex 也集成到 Vue 的官方調(diào)試工具 devtools extension,提供了諸如零配置的 time-travel 調(diào)試、狀態(tài)快照導(dǎo)入導(dǎo)出等高級調(diào)試功能。

以上是vuex的官方文檔對vuex的介紹,官方文檔對vuex的用法進(jìn)行了詳細(xì)的說明。這里就不再細(xì)講vuex的各個用法,寫這篇博客的目的只是幫助部分同學(xué)更快地理解并上手vuex。

1. 安裝

$ npm install vuex --save

2. 在main.js 主入口js里面引用store.js

import Vue from 'vue'
import App from './App'
import router from './router' 
import store from './vuex/store'  //引用store.js
Vue.config.productionTip = false //阻止在啟動時生成生產(chǎn)提示 

//vue實(shí)例
new Vue({
 el: '#app',
 router,
 store,              //把store掛在到vue的實(shí)例下面
 template: '<App/>',
 components: { App }
})

3. 在store.js里引用Vuex

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex) //注冊Vuex

// 定義常量  如果訪問他的話,就叫訪問狀態(tài)對象
const state = {
  count: 1
}

// mutations用來改變store狀態(tài), 如果訪問他的話,就叫訪問觸發(fā)狀態(tài)
const mutations = {
  //這里面的方法是用 this.$store.commit('jia') 來觸發(fā)
  jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
}
//暴露到外面,讓其他地方的引用
export default new Vuex.Store({
  state,
  mutations
})

4. 在vue組件中使用

使用$store.commit('jia')區(qū)觸發(fā)mutations下面的加減方法

<template>
 <div class="hello">
   <h1>Hello Vuex</h1>
   <h5>{{$store.state.count}}</h5>
   <p>
    <button @click="$store.commit('jia')">+</button>
    <button @click="$store.commit('jian')">-</button>
   </p>
 </div>
</template>

<!-- 加上scoped是css只在這個組件里面生效,為了不影響全局樣式 -->
<style scoped>
  h5{
   font-size: 20px;
   color: red;
  }
</style>

5. 查看演示

6. state訪問狀態(tài)對象

使用computed計算

<template>
 <div class="hello">
   <h1>Hello Vuex</h1>
   <h5>{{count}}</h5>
   <p>
    <button @click="$store.commit('jia')">+</button>
    <button @click="$store.commit('jian')">-</button>
   </p>
 </div>
</template>

<script>
import {mapState} from 'vuex'
export default{
  name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實(shí)用
  // 方法一
  // computed: {
  //  count(){
  //   return this.$store.state.count + 6
  //  }
  // }
  
  // 方法二 需要引入外部 mapState
  computed:mapState({
   count:state => state.count + 10
  })
 
  // ECMA5用法
  // computed:mapState({
  //  count:function(state){
  //   return state.count
  //  }
  // })
  
  //方法三
  // computed: mapState([
  //  'count'
  // ])
 }
</script>

7. mutations觸發(fā)狀態(tài) (同步狀態(tài))

<template>
 <div class="hello">
   <h1>Hello Vuex</h1>
   <h5>{{count}}</h5>
   <p>
    <button @click="jia">+</button>
    <button @click="jian">-</button>
   </p>
 </div>
</template>
<script>
import {mapState,mapMutations} from 'vuex'
 export default{
  name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實(shí)用
  //方法三
  computed: mapState([
   'count'
  ]),
  methods:{
   ...mapMutations([
     'jia',
     'jian'
   ])
  }
 }
</script>

8. getters計算屬性

getter不能使用箭頭函數(shù),會改變this的指向

在store.js添加getters

// 計算
const getters = {
  count(state){
    return state.count + 66
  }
}

export default new Vuex.Store({
  state,
  mutations,
  getters
})
//count的參數(shù)就是上面定義的state對象
//getters中定義的方法名稱和組件中使用的時候一定是一致的,定義的是count方法,使用的時候也用count,保持一致。
組件中使用

<script>
 import {mapState,mapMutations,mapGetters} from 'vuex'
 export default{
  name:'hello',
  computed: {
   ...mapState([
    'count'
   ]),
   ...mapGetters([
    'count'
   ])
  },
  methods:{
   ...mapMutations([
     'jia',
     'jian'
   ])
  }
 }
</script>

9. actions (異步狀態(tài))

在store.js添加actions

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

// 定義常量
const state = {
  count: 1
}

// mutations用來改變store狀態(tài) 同步狀態(tài)
const mutations = {
  jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
}
// 計算屬性
const getters = {
  count(state){
    return state.count + 66
  }
}
// 異步狀態(tài)
const actions = {
  jiaplus(context){
    context.commit('jia') //調(diào)用mutations下面的方法
    setTimeout(()=>{
      context.commit('jian')
    },2000)
    alert('我先被執(zhí)行了,然后兩秒后調(diào)用jian的方法')
  },
  jianplus(context){
    context.commit('jian')
  }
}

export default new Vuex.Store({
  state,
  mutations,
  getters,
  actions
})

在組件中使用

<template>
 <div class="hello">
   <h1>Hello Vuex</h1>
   <h5>{{count}}</h5>
   <p>
    <button @click="jia">+</button>
    <button @click="jian">-</button>
   </p>
   <p>
    <button @click="jiaplus">+plus</button>
    <button @click="jianplus">-plus</button>
   </p>
 </div>
</template>
<script>
 import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
 export default{
  name:'hello',
  computed: {
   ...mapState([
    'count'
   ]),
   ...mapGetters([
    'count'
   ])
  },
  methods:{
   // 這里是數(shù)組的方式觸發(fā)方法
   ...mapMutations([
     'jia',
     'jian'
   ]),
   // 換一中方式觸發(fā)方法 用對象的方式
   ...mapActions({
    jiaplus: 'jiaplus',
    jianplus: 'jianplus'
   })
  }
 }
</script>

<style scoped>
  h5{
   font-size: 20px;
   color: red;
  }
</style>

10. modules 模塊

適用于非常大的項(xiàng)目,且狀態(tài)很多的情況下使用,便于管理

修改store.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const state = {
  count: 1
}
const mutations = {
  jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
}
const getters = {
  count(state){
    return state.count + 66
  }
}
const actions = {
  jiaplus(context){
    context.commit('jia') //調(diào)用mutations下面的方法
    setTimeout(()=>{
      context.commit('jian')
    },2000)
    alert('我先被執(zhí)行了,然后兩秒后調(diào)用jian的方法')
  },
  jianplus(context){
    context.commit('jian')
  }
}

//module使用模塊組的方式 moduleA
const moduleA = {
  state,
  mutations,
  getters,
  actions
}

// 模塊B moduleB
const moduleB = {
  state: {
    count:108
  }
}

export default new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB,
  }
})

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

相關(guān)文章

  • 使用Axios攔截器中止Vue請求的步驟詳解

    使用Axios攔截器中止Vue請求的步驟詳解

    假設(shè)?App?的用戶可以在短時間內(nèi)進(jìn)行多個?API?調(diào)用,但您只想顯示上次調(diào)用的結(jié)果,之前正在進(jìn)行的請求變得無關(guān)緊要,在這種情況下,您可以利用?Axios?攔截器,本文給大家介紹了如何使用Axios攔截器中止Vue請求,需要的朋友可以參考下
    2023-11-11
  • 用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • vant-ui框架的一個bug(解決切換后onload不觸發(fā))

    vant-ui框架的一個bug(解決切換后onload不觸發(fā))

    這篇文章主要介紹了vant-ui框架的一個bug(解決切換后onload不觸發(fā)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • NUXT SSR初級入門筆記(小結(jié))

    NUXT SSR初級入門筆記(小結(jié))

    這篇文章主要介紹了NUXT SSR初級入門筆記(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • vue element table中自定義一些input的驗(yàn)證操作

    vue element table中自定義一些input的驗(yàn)證操作

    這篇文章主要介紹了vue element table中自定義一些input的驗(yàn)證操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 關(guān)于vue中watch檢測到不到對象屬性的變化的解決方法

    關(guān)于vue中watch檢測到不到對象屬性的變化的解決方法

    本篇文章主要介紹了關(guān)于vue中watch檢測到不到對象屬性的變化的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • vue中Axios添加攔截器刷新token的實(shí)現(xiàn)方法

    vue中Axios添加攔截器刷新token的實(shí)現(xiàn)方法

    Axios是一款網(wǎng)絡(luò)前端請求框架,本文主要介紹了vue中Axios添加攔截器刷新token的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 如何解決element-ui中select下拉框popper超出彈框問題

    如何解決element-ui中select下拉框popper超出彈框問題

    這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • VUE項(xiàng)目中調(diào)用高德地圖的全流程講解

    VUE項(xiàng)目中調(diào)用高德地圖的全流程講解

    這篇文章主要介紹了VUE項(xiàng)目中調(diào)用高德地圖的全流程講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue 中引用gojs繪制E-R圖的方法示例

    vue 中引用gojs繪制E-R圖的方法示例

    這篇文章主要介紹了vue 中引用gojs繪制E-R圖的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論

莎车县| 武鸣县| 应城市| 彩票| 北辰区| 平山县| 镇远县| 乐至县| 张北县| 应用必备| 台东县| 双江| 乌苏市| 塘沽区| 夏津县| 宁陕县| 台南市| 嘉定区| 敦煌市| 宕昌县| 平顺县| 武汉市| 甘洛县| 卓尼县| 托克逊县| 平顺县| 青阳县| 曲阜市| 绿春县| 兴山县| 博客| 柳州市| 鲁山县| 卢氏县| 安仁县| 高唐县| 会昌县| 阜城县| 靖安县| 茂名市| 康平县|