Vuex基础知识点汇总

本文详述了Vuex的状态管理模式,包括Vuex的安装、使用及核心概念如state、mutation、action、getter和module。通过具体示例,解释了如何在Vue项目中管理组件间的通信,何时应使用Vuex,以及如何组织Vuex项目的结构。此外,还强调了Vuex的响应式特性、同步处理mutation和异步操作action的重要性。

vuex

1. 介绍:

   Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态

2. vue组件之间数据传递

   1. props 父传子

   2. 自定义事件  子传父

   3. $parent 

   4. $children 

   5. $root

   6. ref  $refs

   7. provide inject

   8. $attrs  

   9. vuex 

3. 什么情况下我应该使用 Vuex

   如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。

vuex使用

1. 安装     

   npm install vuex --save

2. main.js导入vuex

    import Vue from 'vue'

    import Vuex from 'vuex'

    Vue.use(Vuex)

3. store(仓库) 

    每一个 Vuex 应用的核心就是 store(仓库).

    1. Vuex 的状态存储是响应式的

    2. 你不能直接改变 store 中的状态,使用vuex提供的方法

4. 创建仓库

   (1). 引入vuex  Vue.use(Vuex)

   (2). const store = new Vuex.Store({ 

       //仓库数据

        state:{

        },

        //修改的方法

    })

    3. 挂载vue实例

       new Vue({

        router,

        store,

        render: h => h(App)

        }).$mount('#app')

state 

1. 获取state数据

   (1). 方法1:直接获取

       this.$store.state.num

      方法2:计算属性获取(了解)

        computed: {

            count () {

                return this.$store.state.num

            }

        }   

    2. mapState 辅助函数 

       import { mapState } from 'vuex'

       computed: {

           ...mapState(['user','count']),

           ...mapState({

               myuser:'user'

           })

       }

Mutation

1. 作用:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation

2. 说明:修改state数据的唯一的方法

3. 语法:

   //修改state的函数事件

    mutations:{

         changeNum(state, payload) {

             state.num += payload;

         },

        changeUser(state, { user }) {

            state.user = user

       },

    } 

4. 使用mutations 

    1.  直接获取方法

        this.$store.commit('changeCount',100) 

    2. mapMutations 辅助函数

        import { mapMutations } from 'vuex'

        methods:{

            ...mapMutations(['changeUser','changeCount']),

            change(){

                this.changeUser()

            }

        }

5. Mutation 需遵守 Vue 的响应规则

   1. 最好提前在你的 store 中初始化好所有所需属性。

   2. 当需要在对象上添加新属性时,你应该 使用 Vue.set(obj, 'newProp', 123)

6. Mutation 必须是同步函数

    一条重要的原则就是要记住 mutation 必须是同步函数。

Action

1. 作用:

    Action 提交的是 mutation,而不是直接变更状态。

    Action 可以包含任意异步操作。

2. 语法

     actions: {

        increment (context,payload) {

            context.commit('increment',payload)

        }

    }

3. 操作actions 

   1. 直接操作

      this.$store.dispatch('action函数名',payload)

    2. mapActions辅助函数

       methods:{

            ...mapActions(['changeActionUser','getBanner']),

            bannerData(){

                this.getBanner()

            }

       }


 

Getter

1. 作用:是 store 的计算属性 缓存state数据 

2. 语法:

    //计算属性 缓存state数据

    getters:{

        money:function(state){

            return state.count*0.657+'美元';

        }

    }

    

3. 获取getters 

    1. 直接获取

      $store.getters.money 

    2. mapGetters辅助函数

         computed:{

            ...mapState(['userinfo']),

            ...mapGetters(['money'])

        }, 

    

Module 

1. 作用:Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块

2. 语法:

  const store = new Vuex.Store({

        modules: {

            a: {

                state:{

                },

                mutations:{

                },

                actions:{}

            },

            b: moduleB

        }

    })

3. 获取模块数据

   (1). state数据

      1. $store.state.模块名字.变量

      2. computed:{

            //获取模块数据:mapState('模块名字',['变量',...])

            ...mapState('centerModule',['num','centerUser']),

        },

    

    (2). getters数据

       1.  $store.getters["centerModule/mynum"] 

       2.   computed: {

                //获取模块数据:mapState('模块名字',['变量',...])

                ...mapState("centerModule", ["num", "centerUser"]),

                ...mapGetters('centerModule',['mynum']),

            },

    (3). mutations /actions

        methods: {

            ...mapMutations("centerModule", ["setUser"]),

            ...mapActions("centerModule", ["setactionUser"]),

            changeuser() {

                this.$store.commit("centerModule/setUser", "修改user1");

            },

            changeuser2() {

                this.setUser("修改user2");

            },

            changeuser3() {

                this.$store.dispatch("centerModule/setactionUser", "3333");

            },

            changeuser4() {

                this.setactionUser("4444");

            },

        },

 项目结构

1. Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:

        应用层级的状态应该集中到单个 store 对象中。

        提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。

        异步逻辑都应该封装到 action 里面。

2. 如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件

    ├── index.html

    ├── main.js

    ├── api

    │   └── ... # 抽取出API请求

    ├── components

    │   ├── App.vue

    │   └── ...

    └── store

        ├── index.js          # 我们组装模块并导出 store 的地方

        ├── actions.js        # 根级别的 action

        ├── mutations.js      # 根级别的 mutation

        └── modules

            ├── cart.js       # 购物车模块

            └── products.js   # 产品模块

本篇文章如有雷同纯属巧合

### Vue 3 核心知识点总结与学习指南 #### 响应式系统 Vue 3 引入了基于 `Proxy` 的响应式系统,取代了 Vue 2 中的 `Object.defineProperty`。这一改进使得响应式数据的追踪更加高效和灵活。开发者可以使用 `ref` 和 `reactive` 来创建响应式数据。 ```javascript import { ref, reactive } from 'vue'; const count = ref(0); const state = reactive({ name: 'Vue 3', version: 3.0 }); ``` #### Composition API Vue 3 引入了 Composition API,允许开发者以更灵活的方式组织和复用逻辑代码。通过 `setup()` 函数,可以将组件的逻辑集中管理,而不是分散在 `data`、`methods` 等选项中。 ```javascript export default { setup() { const count = ref(0); function increment() { count.value++; } return { count, increment }; } }; ``` #### 生命周期钩子 Vue 3 的 Composition API 提供了与 Vue 2 相似的生命周期钩子,但需要从 `vue` 中导入并显式调用。 ```javascript import { onMounted, onUpdated } from 'vue'; export default { setup() { onMounted(() => { console.log('Component mounted'); }); onUpdated(() => { console.log('Component updated'); }); } }; ``` #### 模板语法 Vue 3 的模板语法在 Vue 2 的基础上进行了优化,支持更高效的编译和渲染。例如,`v-for` 指令的使用方式保持一致,但性能有所提升。 ```html <tr v-for="(item, index) in list" :key="item.id"> <td>{{ index }}</td> <td>{{ item.id }}</td> <td>{{ item.name }}</td> </tr> ``` #### 组件通信 Vue 3 提供了多种组件通信方式,包括 `props`、`emits`、`provide/inject` 等。通过 `defineProps` 和 `defineEmits`,可以更清晰地定义组件的输入和输出。 ```javascript const props = defineProps(['title']); const emit = defineEmits(['update:title']); ``` #### 路由与状态管理 Vue 3 可以与 Vue Router 4 和 Vuex 4 配合使用,实现路由管理和状态管理。Vue Router 提供了导航守卫、动态路由等功能,而 Vuex 提供了全局状态管理。 ```javascript import { createRouter, createWebHistory } from 'vue-router'; import { createStore } from 'vuex'; const router = createRouter({ history: createWebHistory(), routes: [] }); const store = createStore({ state: { count: 0 }, mutations: { increment(state) { state.count++; } } }); ``` #### 性能优化 Vue 3 通过编译优化、响应式系统改进等方式,显著提升了性能。建议使用 `key` 属性来帮助 Vue 识别列表中每个元素的唯一性,从而提高渲染效率。 ```html <div v-for="item in items" :key="item.id">{{ item.name }}</div> ``` #### 与 React 的对比 Vue 3 与 React 在组件化开发、插件扩展等方面有相似之处,但在模板语法和响应式机制上有所不同。React 使用 JSX 语法,而 Vue 3 使用模板语法和指令系统。 #### 学习资源 对于初学者,建议从官方文档入手,逐步深入理解 Vue 3 的核心概念和高级特性。社区资源如 VitePress 提供了轻量化的文档生成工具,适合快速搭建学习笔记和项目文档 [^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值