Vuex 了解一下

Vuex 是什么?

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种预测的方式发生变化。

简单来说

1.集中式存储管理状态

2.一种可预测方式发生变化

什么情况下应该使用 Vuex?

1.多个视图依赖于同一状态

2.来自不同视图的行为需要变更同一状态

read it

开始使用 Vuex

安装 Vuex 模块


npm install vuex --save

作为插件使用


Vue.use(Vuex)

定义容器


const store = new.Vuex.Store({
    // your code...
})

注入根实例


new Vue({

  el: '#app',

  store: store

...

})

Vuex 核心概念

store(仓库):这是一个容器,它包含着你的应用中大部分的状态,状态存储是响应式的,不能直接改变 store中的状态

state(状态):定义应用的单一状态树,用一个对象就包含了全部的应用层级状态

store.js


let store = new Vuex.Store({

  state: {

    count: 110       // 定义一个状态

  }

})

hello.vue


<template>

  <div>

    我是hello组件

    <p>{{ n }}</p>

  </div>

</template>

<script>

  export default {

    data () {

      return {

        n: this.$store.state.count      // n的初始值从vuex的state中拿

      }

    }

  }

</script>

getter(派分的状态):抽离操作状态的逻辑,可被多组件使用

mutation(修改状态的唯一途径):要使改变转台可被记录,必须要 commit 一个 mutation, mutation必 须使同步更新状态

store.js


let store = new Vuex.Store({

  state: {

    count: 110       // 定义一个状态

  },

  mutations: {

    updateCount (state,  payload)  {  // 改变state状态的

      state.count += payload.add

    }

  }

})

hello.vue


<template>

  <div>

    <p>我是hello组件</p>

    <p>{{ $store.state.count }}</p>

    <button @click="changeCount">改变count</button>

  </div>

</template>

<script>

  export default {

    methods: {

      changeCount () {

        this.$store.commit ('updateCount',  {

          add: 30

        })

      }

    }

  }

</script>

action(异步操作):异步操作产生结果,action 提交的是 mutation,而不是直接变更状态

store.js


let store = new Vuex.Store({

  state: {

    shopList

  },

  getters: {

    totals (state) {

      return state.shopList.reduce((n,item)=>n+item.count,0)

    }

  },

  mutations: {

    updateCountById (state, payload) {

      // 只要提交mutations就有记录,如果mutation中

      // 有异步操作,记录的还是之前的值

      // 3秒之后改变数值

    /*setTimeout(() => {

      let item = state.shopList.find(item => item.id == payload.id)

      item.count += 1;

    }, 3000);*/

      let item = state.shopList.find(item => item.id === payload.id)

      item.count += 1;

    }

  },

  actions: {

    updateCountAction (store, parmas) {

      // 异步操作放在这里

      setTimeout(() => {

        store.commit('updateCountById', parmas)

      },3000)

    }

  }

})

hello.vue


<template>

  <div>

    Hello Vue

    <div :key="item.id" v-for="item in shopList">

      <button>-</button>

      <span>{{ item.count }}</span>

      <button>+</button>

    </div>

  </div>

</template>

<script>

  export default {

    computed: {

      shopList () {

        return this.$store.state.shopList

      }

    },

    methods: {

      add (id) {

        /* this.$store.commit('updateCountById', {

          id

        }) */

        this.$store.dispatch('updateCountAction', {

          id

        })

      }

    }

  }

</script>

几个原则

1.每个应用将仅仅包含一个 store 实例

2.更改 store 中的状态的唯一方法是提交 mutation

3.Action 可以包含异步操作

4.Action 提交的是 mutation,而不是直接变更状态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容