• VUEX版数字求和案例,附带vuex工作执行顺序图


    Demo还是这个。但是本次使用vuex的方式来写: run一下代码大概就能清楚执行的流程顺序了。

    store文件夹一般单独来写,在main中引入时 ./store 会自动寻找到/index目录,如果有index。

    Count.vue:

    1. <template>
    2. <div>
    3. <h1>当前求和为{{ $store.state.sum }}</h1>
    4. <select v-model="number">
    5. <option :value="1">1</option>
    6. <option :value="2">2</option>
    7. <option :value="3">3</option>
    8. </select>
    9. <button @click="add">+</button>
    10. <button @click="reduce">-</button>
    11. <button @click="odd_add">当前求和为奇数再加</button>
    12. <button @click="wait">等2s再显示数据</button>
    13. </div>
    14. </template>
    15. <script>
    16. export default {
    17. name: "Count",
    18. data() {
    19. return {
    20. number: 1, //用户选择的数字
    21. };
    22. },
    23. methods: {
    24. add() {
    25. this.$store.commit("JIA", this.number);
    26. },
    27. reduce() {
    28. this.$store.commit("JIAN", this.number);
    29. },
    30. odd_add() {
    31. this.$store.dispatch("jishujia", this.number);
    32. },
    33. wait() {
    34. setTimeout(() => {
    35. this.$store.dispatch("waitjia", this.number);
    36. }, 3000);
    37. },
    38. },
    39. };
    40. </script>
    41. <style lang="css" scoped>
    42. button {
    43. margin-left: 5px;
    44. }
    45. </style>

     index.js代码:

    1. //改文件用于创建Vuex中最为核心的store
    2. //引入Vue
    3. import Vue from 'vue'
    4. //引入Vuex
    5. import Vuex from 'vuex'
    6. //准备actions - 用于响应组件中的动作
    7. const actions = {
    8. // add与reduce的调用也仅此为了传递commit给mutations。
    9. // 所以我们前边直接使用了 this.$store.commit 根本不需要经过actions
    10. // add(context, value) {
    11. // context.commit('ADD', value)
    12. // },
    13. // reduce(context, value) {
    14. // context.commit('SUB', value)
    15. // },
    16. jishujia: function (context, value) {
    17. if (context.state.sum % 2 == 1) {
    18. console.log("actions里的jia调用");
    19. context.commit('JIUSHUJIA', value)
    20. }
    21. },
    22. waitjia: function (context, value) {
    23. setTimeout(() => {
    24. console.log("actions里的jia调用");
    25. context.commit('WAITJIA', value)
    26. }, 500);
    27. }
    28. }
    29. //准备mutations- 用于操作数据(state)
    30. const mutations = {
    31. JIA(state, value) {
    32. state.sum += value
    33. console.log("commit中的JIA调用")
    34. },
    35. JIAN(state, value) {
    36. state.sum -= value
    37. console.log("commit中的JIAN调用")
    38. },
    39. JIUSHUJIA(state, value) {
    40. state.sum += value
    41. console.log("commit中的JIUSHUJIA调用")
    42. },
    43. WAITJIA(state, value) {
    44. state.sum += value
    45. console.log("commit中的WAITJIA调用")
    46. },
    47. }
    48. //准备state - 用于存储数据
    49. const state = {
    50. sum: 2,//初始数据为0
    51. }
    52. //使用插件
    53. Vue.use(Vuex)
    54. //创建并暴露store
    55. export default new Vuex.Store({
    56. actions,
    57. mutations,
    58. state
    59. })

    App.vue代码:

    1. <template>
    2. <div>
    3. <Count />
    4. </div>
    5. </template>
    6. <script>
    7. import Count from "./components/Count";
    8. export default {
    9. name: "App",
    10. components: { Count },
    11. };
    12. </script>

    main.js代码:

    1. //引入Vue
    2. import Vue from 'vue'
    3. //引入App
    4. import App from './App.vue'
    5. //关闭Vue的生产提示
    6. Vue.config.productionTip = false
    7. //引入Vuex
    8. import Vuex from 'vuex'
    9. //引入store
    10. import store from './store/index'
    11. //创建vm
    12. new Vue({
    13. el: '#app',
    14. render: h => h(App),
    15. store,
    16. beforeCreate() {
    17. Vue.prototype.$bus = this
    18. },
    19. })

    原理图:

    通过store中有三个内置方法 Actions,Mutations,State。

    使用时一般会通过 $store.dispatch  ——> Actions(用来响应动作) ——> 然后再用commit的方式找到 mutations ——> (用于操作数据[state]) ——>  state用来存储数据

    但如果使用Actions只是为了声明一下,并没有实际意义,就可以绕过这一步直接调用commit来操作数据。就比如我在调用add方法的时候,仅此为了传递commit给mutations。所以可以直接使用 this.$store.commit  根本不需要经过actions。

     一些细节问题:

    2022年2月7日,vue3成为了默认版本,如果执行npm i vue则直接安装vue3,同时vuex4随之变成默认版本,如果执行npm i vuex则直接安装vuex4,但vuex4只能在vue3中使用,如果当前使用的是vue2,则必须使用:

    vuex3:npm i vuex@3

    安装:npm i vuex ——> 创建store文件夹 ——> 在store文件夹下创建index.js,该js文件用于创建vuex中最为核心的store ——> 在index.js里引入vue和vuex ——> 使用Vue.use(Vuex) ——>  在main.js里引入store。

    还有就是一个import的问题,为什么使用插件要在index.js里,而不是在main.js中

    Vue.use(Vuex)

    vue会不按照顺序,先全部import你导入的东西,所以就会遇到一个这样的错误,要先使用use(Vuex)才能Store。

    所以这样写,就能自己控制执行顺序:

    1. //1.使用插件
    2. Vue.use(Vuex)
    3. //2.创建并暴露store
    4. export default new Vuex.Store({
    5. actions,
    6. mutations,
    7. state
    8. })
  • 相关阅读:
    创建order\stock模块 Dubbo 负载均衡
    Conflux国产公链注册流程
    python简单实现经典的图像匹配算法SIFT
    打造个性化代购商城,源码解决方案助您独占海外购物市场
    视频拍摄教程分享
    更改Windows上的远程桌面的侦听端口
    微宏科技基于 KubeSphere 的微服务架构实践
    【云原生】Kubernetes介绍
    椭圆曲线算法
    动态规划——数字三角形模型
  • 原文地址:https://blog.csdn.net/ONLYSRY/article/details/125604676