vuex-store-5.0

                                         vuex-store解析

5.0------vuex共享 是插件 Single Source of Truth单一状态树--》单一数据源 即只推荐使用一个store

  1.  store文件下 index.js

    import Vue from 'vue'

    import Vuex from 'vuex'


    1.1.安装插件

      vue.use(Vuex)

    1.2.创建对象

    const store = new Vuex.Store({     

      state:{                                                                  Action ->Mutations(先进行修改) ->State(不要在这进行修改)

          counter:1000                                                Devtools插件 监控state的改变(只能监控同步操作,直接修改state是监控不了)

          student:[

            {name:'1',age:18},                                       

            {name:'3',age:22},

            {name:'2',age:30}

          ],

          info:{

              name:'cobe',

              age:33,

              hobby:hehe

          }

      },-----------------------------------------------

        mutations:{                         

            同步操作 

            // 定义方法  只要对state进行修改的内容 都在这里进行状态更新

          increment(state){                          在App.vue中用  this.$store.commit('increment') 获取

            state.counter++

          },

          decrement(state){                          在App.vue中用 this.$store.commit('decrement') 获取

            state.counter--

          },

          incrementCount(state,count){            在App.vue中  <button @click="addCount(5)">+5</button>

            state.counter += count                    addCount(count){  1.普通的提交封装

          }                                                                this.$store.commit(' incrementCount',count)

          ,                                                                }

            incrementCount2(state,payload){            在App.vue中  <button @click="addCount(5)">+5</button>

            state.counter += payload.count            addCount(count){    1.特殊的提交封装

          }                                                                        this.$store.commit({

                                                                                        type:'incrementCount2', count

                                                                                    })

          ,                                                                    }

          updataInfo(state){

                state.info.name = 'coderwh'              响应式

              // state.info['address'] = '洛杉矶'            增加一个属性  没有响应式

              //  Vue.set(state.info,'address','洛杉矶')    增加一个属性  具有响应式

              //  delete state.info.age                          删除一个属性  没有响应式

              //  Vue.delete(state.info,'age')                删除一个属性  具有响应式

        }, 

          addStudent(state,stu){                          在App.vue中  <button @click="addstudent">添加学生</button>

          state.student.push(stu)                        addstudent(){  const stu ={name:'4'.age:20}

          }                                                                                  this.$store.commit('addStudent',stu)

        },                                                        },-----------------------------------------------

        actions:{  异步操作      类似于mutations  修改state内容时,要经过mutations  在App.vue中  this.$store.dispatch('aupdataInfo',参数)

            aUpdateInfo(context,payload(参数)){    context:上下文 相当于store           

              setTimeout(()=>{

                  context.commit('updataInfo')

              },1000)

            },

            异步请求后 ,通知外界

      2.1    aupdateInfo(context,payload){    context:上下文 相当于store           

              setTimeout(()=>{                                                  在App.vue中  this.$store.dispatch('aupdataInfo',{

                  context.commit('updataInfo')  里面提交完成                                      message:'携带的信息'

                    console.log(payload.message)                                                        success:()=>{      console.log('里面已完成')

                    payload.success()  回调                                                                    }

              },1000)                                                                                          })   

            }, 

    2.2    aupdateInfo(context,payload){    context:上下文 相当于store

                return new Promise((reslove,reject)={                    在App.vue中  this.$store.dispatch('aupdataInfo',‘携带的信息')

                  setTimeout(()=>{                                                                          .then(res=>{

                    context.commit('updataInfo')    里面提交完成                              console.log('里面完成了提交')

                    console.log(payload)                                                                  console.log(res)      打印  hahah

                    reslove('hahah')  向外界传入参数                                                })             

              },1000)     

            })                                                                                       

          },                                                                                                           

        },,-----------------------------------------------                                                                                                             

        getters:{

        类似于计算属性 进行操作但不对state进行修改  eg:filter 过滤器

        powerCounter(state){                      在App.vue中      <h2>{{$store.getters.powerCounter}}<h2>

          return state.counter * state.counter

        },

        more20stu2(state){                          在App.vue中  <h2>{{$store.getters.more20stu2}}<h2>

          return state.students.filter(s=>s.age >20) 

        },

        more20stu2Length(state,getters){    在App.vue中  <h2>{{$store.getters.more20stu2Length}}<h2>

          return getters.more20stu2.length

      },

      moreAgeStu(state){                            在App.vue中  <h2>{{$store.getters.moreAgeStu(18)}}<h2>  传入一个参数

        return function(age){

          return state.student.filter(s=>s.age>age)

        }

      }

      },-----------------------------------------------

        module:{                                      const moduleA={                                    在App.vue中  <h2>{{$store.state.a.name}}<h2>                     

            划分专门模块 进行保存                  state:{  name:'zhangsan'},

          a:moduleA                                    mutations:{                                        在App.vue中    <button @click="updateName">修改名字</button>

        }                                                            updateName(state,payLoad){                  updateName(){  this.$store.commit(' updateName','lisi') }

                                                                        state.name = payLoad

                                                                      }

                                                                    },

                                                                actions:{

                                                                    aUpdateName(context){            这里的    context是本模块   

                                                                    }                                              如果想调用根模块就调用  context.rootGetters

                                                                },

                                                                getters:{                                             

                                                                      fullname(state){                            在App.vue中  <h2>{{$store.getters.fullname}}<h2>   

                                                                          return state.name + 'hahhah'

                                                                      },

                                                                      fullname2(state,getters){                在App.vue中  <h2>{{$store.getters.fullname2}}<h2>   

                                                                          return getters.fullname + 'hahhah2'

                                                                      },

                                                                      引用大模块中state的数据-----

                                                                      fullname3(state,getters,rootstate){    在App.vue中  <h2>{{$store.getters.fullname3}}<h2>   

                                                                          return getters.fullname + rootstate.counter

                                                                      }

                                                                  }

    })                                                             

    default export store  -----------------------------------------------

  2.在main.js中  添加

    import store from './store'

    new Vue({

      el:'#app',

      store,            添加这行

      render:h =>h(App)

    })

  3.在App.vue 中          -----------------------------------------------

  3.1  <template>

        <h2>{{$store.state.counter}}<h2>

        <button @click="$store.state.counter++">+</button>

        <button @click="$store.state.counter++">-</button>

    </template>

    3.2  <template>

        <h2>{{$store.state.counter++}}<h2>

        <button @click="additon">+</button>

        <button @click="subtraction">-</button>

        <h2>{{$store.getters.powerCounter}}<h2>

        <h2>{{more20stu}}<h2>

    </template>

    <script>

      export default{

        computed:{

          more20stu(){

            return this.$store.state.students.filter(s=>{

              return s.age >= 20

          })

        }

      },

        methods:{

          additon(){

            this.$store.commit('increment')

          },

          subtraction(){

            this.$store.commit('decrement')

          },

        }

      }

    </script>

5.x-----------es6语法  对象结构

  const obj = {

      name:'why',

      age:18,

      height:1.9

    }

  const {name,height,age} =obj;  顺序可以调换

  console.log(obj.name) =>why    console.log(obj.age) =>18  console.log(obj.height) =>1.9

例子:局部状态通过context.state 暴露出来,根节点状态则为context.rootState    在上述module中有描述

const moduleA = {

  actions:{

    hahaha({state,commit,rootState})

        console.log(rootState)    打印出来的是根节点对应的内容

  },

  getters:{

    hahaha({state,commit,rootState})

      return state.count + rootState.count    即本状态下的count 加上 根节点上 count

        console.log(rootState)    打印出来的是根节点对应的内容

  }

}

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

推荐阅读更多精彩内容

  • 复盘做一些微调整,发现大部分人看盘以同花顺为主,板块分析方面从今天开始跟踪同花顺热点板块,以前都是做的通达信板块复...
    三少爷的自修之路阅读 255评论 0 2
  • 在生活中,当某个人的某些特点非常突出或者与家中长辈比较相似时,大家都会说:这是天生的,这是遗传!好像每个人都对遗传...
    康有趣阅读 195评论 0 0
  • 习惯了老婆在家的日子,她总是在我生活的每个角落存在,在视觉范围内的时候,我能看见她,不在眼前时能感受她的气息,...
    苍景流年_5cbf阅读 545评论 4 6
  • 大雁远飞万里,只为寻觅一个温暖的家?那么,人历尽苦难彷徨,为的又是什么呢? 风荷惨淡,梧桐摇落,浅草悠悠满路。...
    留觅阅读 247评论 0 2