• Vuex入门


    目录

    一、使用Vuex

    二、vuex使用步骤

    1.安装

    2.创建store模块,分别维护state/actions/mutations/getters

    3.在store/index.js文件中新建vuex的store实例,并注册上面引入的各大模块

    4.在main.js中导入并使用store实例(只需标红部分)

    二、Vuex取值

    三、Vuex存值

    四、Vuex异步加载


    一、使用Vuex

    为什么要用

    解决了前端组件传参的问题,针对当前项目所有的变量进行统一管理

    组件传参

    1.子传父  $emit     父传子 props

    2.总线    vue根实例中定义变量,这个变量也是vue实例

    3.核心组件vuex

            state.js   存储变量

                    获取this.$store.state.变量值

            Getters.js  获取变量值

                     获取 this.$store.getters.变量的get方法

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

                    改变值  this.$store.conmmit("同步的方法",{...});

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

                    改变值  this.$store.dispath("异步的方法",{...})

    二、vuex使用步骤

    1.加载依赖

    2.导入Vuex的核心组件,然后index.js加载进来

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

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

    1.安装

    //安装最新版本

     npm install vuex -S

    //安装指定版本

    npm i -S vuex@3.6.2

    2.创建store模块,分别维护state/actions/mutations/getters

    3.在store/index.js文件中新建vuexstore实例,并注册上面引入的各大模块

    1. import Vue from 'vue'
    2. import Vuex from 'vuex'
    3. import state from './state'
    4. import getters from './getters'
    5. import actions from './actions'
    6. import mutations from './mutations'
    7. Vue.use(Vuex)
    8. const store = new Vuex.Store({
    9. state,
    10. getters,
    11. actions,
    12. mutations
    13. })
    14. export default store

    4.main.js中导入并使用store实例(只需标红部分)

    import store from './store'

          new Vue({

    el: '#app',

    router,

    store, //main.js中导入store实例

    components: {

    App

    },

    template: '',

    data: {

    //自定义的事件总线对象,用于父子组件的通信

    Bus: new Vue()

    }

          })

    二、Vuex取值

    state.js

    1. export default{
    2. resName:'反方向的钟'
    3. }

    VuexPage1.vue

    1. <template>
    2. <div>
    3. <h3>{{msg}}</h3>
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: 'VuexPage1',
    9. data() {
    10. return {}
    11. },
    12. computed: {
    13. msg() {
    14. // 不推荐 不安全
    15. return this.$store.state.resName;
    16. }
    17. }
    18. }
    19. </script>

    router/index.js

    import VuexPage1 from '@/views/sys/VuexPage1'

    //放在 AppMain 的 children 下

     {
              path: '/sys/VuexPage1',
              name: 'VuexPage1',
              component: VuexPage1
            }

    三、Vuex存值

    mutations.js

    1. export default {
    2. setResName: (state, payload) => {
    3. //state对应state.js中的对象
    4. //payload载荷对应传递的JSON对象
    5. state.resName = payload.resName;
    6. }
    7. }

     getters.js

    1. export default {
    2. getResName: (state) => {
    3. return state.resName;
    4. }
    5. }

    VuexPage1.vue

    <button @click="buy">点我啊</button>
    1. methods: {
    2. buy() {
    3. this.$store.commit('setResName', {
    4. resName: '说好不哭'
    5. })
    6. }
    7. }

    点击后效果

     

     

    四、Vuex异步加载

    VuexPage2.vue

    1. <template>
    2. <div>
    3. <h3>页面2{{msg}}</h3>
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: 'VuexPage2',
    9. data() {
    10. return {}
    11. },
    12. computed: {
    13. msg() {
    14. return this.$store.getters.getResName;
    15. }
    16. }
    17. }
    18. </script>
    19. <style>
    20. </style>

     VuexPage1.vue

    <button @click="buy2">异步</button>
    1. buy2() {
    2. this.$store.dispatch('setResNameAsync', {
    3. resName: '暗号',
    4. _this: this
    5. })
    6. }

     

     

    actions.js

    1. export default {
    2. setResNameAsync: (context, payload) => {
    3. //异步修改值 设置执行时间 context值得是vue的上下文 相当于this.$store
    4. setTimeout(function() {
    5. context.commit('setResName', payload);
    6. }, 6000);
    7. let _this = payload._this;
    8. let url = _this.axios.urls.SYSTEM_MENU_TREE;
    9. console.log(url);
    10. _this.axios.post(url, {}).then(res => {
    11. console.log(res);
    12. // this.menus=res.data.result;
    13. }).catch(function(error) {
    14. console.log(error);
    15. });
    16. }
    17. }

     

    先点的后执行,后点的先执行

     

     

    先点的执行后

     

  • 相关阅读:
    干货 | 在存储过程中使用事务来防止数据不一致
    Selenium —— 网页frame与多窗口处理!
    Banana Pi BPI-5202 龙芯2K1000lA在工业控制行业的应用
    Spring依赖注入与控制反转
    Kafka25道面试题总结(答案解析)
    web前端期末大作业 基于HTML+CSS+JavaScript学生宿舍管理系统
    flutter实现左侧导航,拿走即用
    JS中的前后端交互技术ajax
    C++ //练习 10.37 给定一个包含10个元素的vector,将位置3到7之间的元素按逆序拷贝到一个list中。
    springboot物联网云平台源码 java物联网系统源码
  • 原文地址:https://blog.csdn.net/weixin_61523879/article/details/126858814