• 快速入门vuex!!


    目录

    一.vuex的核心组成

    二.vuex版本问题及store.js的使用

    1.1.使用vue的步骤

     三.vuex中的设置及获取变量值

    四.vue操作中异步和同步操作

    五.vuex后台交互


    一.vuex的核心组成

     核心组件:

    state.js存储变量

    Gettere.js获取变量值

    mutations.js改变变量值(同步)

    actions.js改变变量值(异步)

    二.vuex版本问题及store.js的使用

    1.1.使用vue的步骤

    1.加载依赖:npm install vuex -s 下载vue最新版本的依赖

     

    2.导入vue的核心4个组件,然后通过index.js加载进来

            index.js

            state.js

            actions.js

            mutations.js

            getters.js

    import Vue from 'vue'

    import Vuex from 'vuex'

    import state from './state'

    import getters from './getters'

    import actions from './actions'

    import mutations from './mutations'

    Vue.use(Vuex)

    const store = new Vuex.Store({

      state,

      getters,

      actions,

      mutations

     })

     export default store

     

    3.将vuex对应的index.js 挂载到main.js 中的vue实例中

     

    4.测试vuex的存储变量的功能

    注意:错误示范

    创建一个VuexPage1:

    代码:

    1. <template>
    2. <div>
    3. <p>欢迎来到{{msg}}p>
    4. div>
    5. template>
    6. <script>
    7. export default {
    8. name: 'VuexPage1',
    9. data () {
    10. return {
    11. }
    12. },
    13. computed: {
    14. msg () {
    15. return this.$store.state.reaName
    16. }
    17. }
    18. }
    19. script>
    20. <style>
    21. style>

     结果会有错误:

     

    原因:vue的版本问题

     npm i -S vuex@3.6.2

     三.vuex中的设置及获取变量值

     

    mutations.js:

    1. import state from "./state";
    2. export default{
    3. setResName:(state,payload)=>{
    4. //state对象就对应了state.js中的对象
    5. //payload载荷对应的传递的json对象参数{name:zs,age:12}
    6. state.resName = payload.resName;
    7. }
    8. }

    创建两个VuexPage1和VuexPage2进行观察:

    VuexPage1:

    1. <template>
    2. <div>
    3. <p>页面1:欢迎来到{{msg}}p>
    4. <button @click="buy">盘它button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: 'VuexPage1',
    10. data () {
    11. return {
    12. }
    13. },
    14. methods: {
    15. buy () {
    16. console.log(this.$store)
    17. // 通过该方法会调用mutation.js文件中定义好的方法
    18. this.$store.commit('setResName', {
    19. resName: 'KFC'
    20. })
    21. }
    22. },
    23. computed: {
    24. msg () {
    25. // console.log(this.$store)
    26. // return this.$store.state.resName
    27. // 通过getters.js文件获取state.js中的定义的变量值
    28. return this.$store.getters.setResName
    29. }
    30. }
    31. }
    32. script>
    33. <style>
    34. style>

    VuexPage2:

    1. <template>
    2. <div>
    3. <p>页面2:欢迎来到{{msg}}p>
    4. <button @click="buy">盘它button>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: 'VuexPage2',
    10. data () {
    11. return {
    12. }
    13. },
    14. computed: {
    15. msg () {
    16. // console.log(this.$store)
    17. // return this.$store.state.resName
    18. // 通过getters.js文件获取state.js中的定义的变量值
    19. return this.$store.getters.setResName
    20. }
    21. }
    22. }
    23. script>
    24. <style>
    25. style>

    效果:点击盘它按钮两个界面都会出现欢迎来到KFC

     

     

    四.vue操作中异步和同步操作

    actions.js

    1. export default {
    2. setResNameAsync: (context, payload) => {
    3. //异步修改值
    4. //context指的是vuex的上下文
    5. //此代码在6秒后执行
    6. setTimeout(function() {
    7. context.commit('setResName', payload);
    8. }, 6000);
    9. }
    10. }

    VuexPage1:

    1. <template>
    2. <div>
    3. <p>页面1:欢迎来到{{msg}}p>
    4. <button @click="buy">盘它button>
    5. <button @click="buyAsync">最终店长button>
    6. div>
    7. template>
    8. <script>
    9. export default {
    10. name: 'VuexPage1',
    11. data () {
    12. return {
    13. }
    14. },
    15. methods: {
    16. buy () {
    17. console.log(this.$store)
    18. // 通过该方法会调用mutation.js文件中定义好的方法
    19. this.$store.commit('setResName', {
    20. resName: 'KFC'
    21. })
    22. },
    23. buyAsync () {
    24. this.$store.dispath('setResNameAsync', {
    25. resName: '麦当劳'
    26. })
    27. }
    28. },
    29. computed: {
    30. msg () {
    31. // console.log(this.$store)
    32. // return this.$store.state.resName
    33. // 通过getters.js文件获取state.js中的定义的变量值
    34. return this.$store.getters.setResName
    35. }
    36. }
    37. }
    38. script>
    39. <style>
    40. style>

    效果:

     

     

    五.vuex后台交互

    actions.js

    1. export default {
    2. setResNameAsync: (context, payload) => {
    3. //异步修改值
    4. //context指的是vuex的上下文
    5. //此代码在6秒后执行
    6. setTimeout(function() {
    7. context.commit('setResName', payload);
    8. }, 6000);
    9. let _this = payload._this;
    10. let url = _this.axios.urls.SYSTEM_MENU_TREE;
    11. _this.axios.post(url, {}).then(r => {
    12. console.log(r);
    13. }).catch(e => {
    14. });
    15. }
    16. }

    VuexPage1:

    1. <template>
    2. <div>
    3. <p>页面1:欢迎来到{{msg}}p>
    4. <button @click="buy">盘它button>
    5. <button @click="buyAsync">最终店长button>
    6. div>
    7. template>
    8. <script>
    9. export default {
    10. name: 'VuexPage1',
    11. data () {
    12. return {
    13. }
    14. },
    15. methods: {
    16. buy () {
    17. console.log(this.$store)
    18. // 通过该方法会调用mutation.js文件中定义好的方法
    19. this.$store.commit('setResName', {
    20. resName: 'KFC'
    21. })
    22. },
    23. buyAsync () {
    24. this.$store.dispath('setResNameAsync', {
    25. resName: '麦当劳',
    26. _this: this
    27. })
    28. }
    29. },
    30. computed: {
    31. msg () {
    32. // console.log(this.$store)
    33. // return this.$store.state.resName
    34. // 通过getters.js文件获取state.js中的定义的变量值
    35. return this.$store.getters.setResName
    36. }
    37. }
    38. }
    39. script>
    40. <style>
    41. style>

  • 相关阅读:
    JVM内存结构详解
    Go 优雅判断 interface 是否为 nil
    聊聊如何利用springcloud gateway实现简易版灰度路由
    YOLO物体检测-系列教程1:YOLOV1整体解读(预选框/置信度/分类任/回归任务/损失函数/公式解析/置信度/非极大值抑制)
    Pwn2Own Austin 2021 Cisco RV34x RCE 漏洞链复现
    串口屏-迪文10寸T5串口屏简单上手
    前端开箱即用的中后台管理模版,建议收藏
    多级缓存之实现多级缓存
    记录:2022-9-12 多路归并 超级丑数 败者树 调度算法实现 帧分配 系统抖动 内存映射文件 内核内存分配
    MySQL 深度分页性能急剧下降,该如何优化?
  • 原文地址:https://blog.csdn.net/m0_68211831/article/details/126874767