vuex的入门使用 - 前端笔记-一,什么是vuex vuex的vue的状态(数据)管理工具 , 也就是说 vuex打破了,组件之间的传值, 父传子: 通过 v-bind 属性绑定的方式传值  .....

学习笔记

点滴记忆
回忆过往
首页>> web前端 >>vuex的入门使用 - 前端笔记
2020-1-27
分类: web前端

vuex的入门使用

文章作者:痴迷

一,什么是vuex     vuex的vue的状态(数据)管理工具 , 也就是说 vuex打破了,组件之间的传值,     父传子: 通过 v-bind 属......

一,什么是vuex
    vuex的vue的状态(数据)管理工具 , 也就是说 vuex打破了,组件之间的传值,
    父传子: 通过 v-bind 属性绑定的方式传值   通过props 接收值
    子传父: 通过 @on 事件绑定 $emit 函数的 的方式传值, 通过 子组件传过来的函数名称    作为父组件的函数名称 进行接收
     非父子: 通过 bus ,第三方中间件的方式 传值 , 传值 通过 $emit 函数   接值  通过 $on 监听数据 接收

vuex的诞生就是  管理这些vue当中的复杂传值,之间把vuex当作全局数据 进行一个vuex语法的使用 数据

vuex中,有默认的五种基本的对象:

state:存储状态(变量)----存储数据的
getters:对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()---复制state的值,创建一个展示的值给你,但是不会改变state中的数据
mutations:修改状态,并且是同步的。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。----修改state中数据的
actions:异步操作。在组件中使用是$store.dispath('')----处理mutations不能处理的异步请求的
modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。----子模块开发的



二,vuex的安装

          1.下载安装           
npm install vuex --save
         2.引入vuex和注册vuex
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)


     3.创建 steot
const store = Vuex.Store({
  //state放数据的
  state: {
    count2,
  },
  //对数据进行运算,但是不能做异步运算
  mutations: {
  },
  //对数据进行异步运算,不能直接做运算
  actions: {
  },
  modules: {
  }
})


5.把steot函数挂在到vue实例中
new Vue({
  store,
  renderh => h(App)
}).$mount('#app')


三,vuex的数据调用方法(state数据的调用)

State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储
     1.通过this.$store.state.全局数据名称  如:this.$store.state.count 直接调用数据
<template>
  <div>
    <!-- //第一种调用vuex中的全局数据中的方法 -->
    <p>我是第一种方法调用的vuex的数据:{{ this.$store.state.count }}</p>
  </div>
</template>

<script>
export default {};
</script>
<style scoped></style>
    2.通过先按需导入mapState函数: import { mapState } from 'vuex'
然后数据映射为计算属性: computed:{ ...mapState(['全局数据名称']) }
<template>
  <div>
    <p>我是第二种方法调用的vuex的数据:{{ count }}</p>
  </div>
</template>

<script>
import { mapState } from "vuex";
export default {
  computed: {
    ...mapState(["count"])
  },
  methods: {}
};
</script>
<style scoped></style>


四,通过mutations修改state中的数据
Mutation用于修改变更$store中的数据
    1.通过点击事件,触发mutations中的函数进行 state的数据的计算
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

export default new Vuex.Store({
  //放数据的
  state: {
    count2,
  },
  //处理数据的函数
  mutations: {
    //state 代表 state数据源,
    add (state) {
      //把 state中的  count 数据进行 自曾1
      state.count++;
    },
    //参数二,stop代表传入过来的值
    addn (statestop) {
      //把 state中的  count 数据进行 自曾1
      state.count += stop;
    },

    addj (state) {
      //把 state中的  count 数据进行 自减1
      state.count--;
    },
    addjn (statest) {
      //把 state中的  count 数据进行 自减1
      state.count -= st;
    }
  },
  //处理异步函数的(不处理数据的计算)
  actions: {
  },
})

<template>
  <div>
    <!-- //第一种调用vuex中的全局数据中的方法 -->
    <p>我是第一种方法调用的vuex的数据:{{ this.$store.state.count }}</p>
    <button @click="addjia">+1</button>
    <button @click="addjian">+n</button>
  </div>
</template>

<script>
export default {
  methods: {
    addjia() {
      //触发mutations 中的add函数
      this.$store.commit("add");
    },
    addjian() {
      //触发mutations 中的add函数
      this.$store.commit("addn"3);
    }
  }
};
</script>
<style scoped></style>




2.通过按需导入 mapMutations的方法,在methods中 调用mutations中的函数

import { mapMutations } from 'vuex'

methods:{ ...mapMutations(['add']) }

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

export default new Vuex.Store({
  //放数据的
  state: {
    count2,
  },
  //处理数据的函数
  mutations: {
    //state 代表 state数据源,
    add (state) {
      //把 state中的  count 数据进行 自曾1
      state.count++;
    },
    //参数二,stop代表传入过来的值
    addn (statestop) {
      //把 state中的  count 数据进行 自曾1
      state.count += stop;
    },

    addj (state) {
      //把 state中的  count 数据进行 自减1
      state.count--;
    },
    addjn (statest) {
      //把 state中的  count 数据进行 自减1
      state.count -= st;
    }
  },
  //处理异步函数的(不处理数据的计算)
  actions: {
  },
})

<template>
  <div>
    <p>我是第二种方法调用的vuex的数据:{{ count }}</p>
    <button @click="addjian">-1</button>
    <button @click="addjiann">-n</button>
  </div>
</template>

<script>
import { mapStatemapMutations } from "vuex";

export default {
  data() {
    return {};
  },
  computed: {
    ...mapState(["count"])
  },
  methods: {
    ...mapMutations(["addj""addjn"]),
    addjian() {
      this.addj();
    },
    addjiann() {
      this.addjn(10);
    }
  }
};
</script>
<style scoped></style>



五,通过actions处理mutations 函数中   不能处理异步对象的函数
在mutations中不能编写异步的代码,会导致vue调试器的显示出错。 在vuex中我们可以使用Action来执行异步操作。


1.直接调用 actions 处理 异步对象
import Vue from 'vue'
import Vuex from 'vuex'
import { setTimeout } from 'core-js';
Vue.use(Vuex)

export default new Vuex.Store({
  //放数据的
  state: {
    count2,
  },
  //处理数据的函数
  mutations: {
    //state 代表 state数据源,
    add (state) {
      //把 state中的  count 数据进行 自曾1
      state.count++;
    },
    //参数二,stop代表传入过来的值
    addn (statestop) {
      //把 state中的  count 数据进行 自曾1
      state.count += stop;
    },

    addj (state) {
      //把 state中的  count 数据进行 自减1
      state.count--;
    },
    addjn (statest) {
      //把 state中的  count 数据进行 自减1
      state.count -= st;
    }
  },
  //处理异步函数的(不处理数据的计算)
  actions: {
    // 参数一 指向,mutations(处理数据的函数),
    //参数二 执行,接收调用本函数传过来的值
    asyncadd (contextstep) {
      setTimeout(() => {
        //用commit指向一个 mutations中的函数  和  传值内容
        context.commit('addn'step)
      }, 1000)
    },
    asyncjain (contextstep) {
      setTimeout(() => {
        //用commit指向一个 mutations中的函数  和  传值内容
        context.commit('addjn'step)
      }, 1000)
    }

  },
})

<template>
  <div>
    <!-- //第一种调用vuex中的全局数据中的方法 -->
    <p>我是第一种方法调用的vuex的数据:{{ this.$store.state.count }}</p>
    <button @click="addjia">+1</button>
    <button @click="addjian">+n</button>
    <button @click="addjians">延迟1秒+n</button>
  </div>
</template>

<script>
export default {
  methods: {
    addjia() {
      //触发mutations 中的add函数
      this.$store.commit("add");
    },
    addjian() {
      //触发mutations 中的add函数
      this.$store.commit("addn"3);
    },
    addjians() {
      this.$store.dispatch("asyncadd"5);
    }
  }
};
</script>
<style scoped></style>



2.通过按需导入mapactions 函数处理异步数据

import { mapActions } from 'vuex'

methods:{ ...mapMutations(['subAsync']) }

import Vue from 'vue'
import Vuex from 'vuex'
import { setTimeout } from 'core-js';
Vue.use(Vuex)

export default new Vuex.Store({
  //放数据的
  state: {
    count2,
  },
  //处理数据的函数
  mutations: {
    //state 代表 state数据源,
    add (state) {
      //把 state中的  count 数据进行 自曾1
      state.count++;
    },
    //参数二,stop代表传入过来的值
    addn (statestop) {
      //把 state中的  count 数据进行 自曾1
      state.count += stop;
    },

    addj (state) {
      //把 state中的  count 数据进行 自减1
      state.count--;
    },
    addjn (statest) {
      //把 state中的  count 数据进行 自减1
      state.count -= st;
    }
  },
  //处理异步函数的(不处理数据的计算)
  actions: {
    // 参数一 指向,mutations(处理数据的函数),
    //参数二 执行,接收调用本函数传过来的值
    asyncadd (contextstep) {
      setTimeout(() => {
        //用commit指向一个 mutations中的函数  和  传值内容
        context.commit('addn'step)
      }, 1000)
    },
    asyncjain (contextstep) {
      setTimeout(() => {
        //用commit指向一个 mutations中的函数  和  传值内容
        context.commit('addjn'step)
      }, 1000)
    }

  },
})

<template>
  <div>
    <p>我是第二种方法调用的vuex的数据:{{ count }}</p>
    <button @click="addjian">-1</button>
    <button @click="addjiann">-n</button>
    <button @click="addjiannjain">延迟1秒 - n</button>
  </div>
</template>

<script>
//按需导入  mapstate数据源,mapmutations 处理数据的函数(不能处理异步对象的数据的计算)
//,mapactions处理异步数据的函数(不能处理数据的计算)
import { mapStatemapMutationsmapActions } from "vuex";

export default {
  data() {
    return {};
  },

  //在计算属性 computed中通过 mapstate展开运算符导入 数据名(在vuex中定义的数据)
  computed: {
    ...mapState(["count"])
  },
  //在vue放函数里面 methods 中  通过 mapmutations ,mapactions展开运算导入对象的处理函数
  methods: {
    ...mapMutations(["addj""addjn"]),
    ...mapActions(["asyncjain"]),
    addjian() {
      this.addj();
    },
    addjiann() {
      this.addjn(10);
    },
    addjiannjain() {
      this.asyncjain(5);
    }
  }
};
</script>
<style scoped></style>




×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:前端笔记 » vuex的入门使用

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)