VueX复习

Vuex 是什么? | Vuex

  • state 存放状态(数据)  必须的
  • mutations state成员操作 -- 修改state中的数据   同步操作
  • getters er 加工state成员给外界  -- 获取state中的数据,类似于组件中的计算属性
  • actions 异步操作   异步操作 在vuex中可以进行异步操作(ajax),异步操作不能修改state
  • modules 模块化状态管理  多状态文件管理时使用

首先,Vue组件如果调用某个VueX的方法过程中需要向后端请求时或者说出现异步操作时,需要dispatch VueX中actions的方法,以保证数据的同步。可以说,action的存在就是为了让mutations中的方法能在异步操作中起作用。

如果没有异步操作,那么我们就可以直接在组件内提交状态中的Mutations中自己编写的方法来达成对state成员的操作。不建议在组件中直接对state中的成员进行操作,这是因为直接修改(例如:this.$store.state.name = 'hello')的话不能被VueDevtools所监控到。最后被修改后的state成员会被渲染到组件的原位置当中去。

安装

  • 方案1:在使用vue-cli命令创建项目时,勾选上vuex选项,即安装上vuex插件(推荐)
  • 方案2:通过后续的npm来进行安装 【npm i -S vuex】

在一个模块化的打包系统中,您必须显式地通过 Vue.use() 来安装 Vuex:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

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

“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)

Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

  2. 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

src下创建store

让我们来创建一个 store。创建过程直截了当——

仅需要提供一个初始 state 对象和一些 mutation

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更

store.commit('increment')

console.log(store.state.count) // -> 1

为了在 Vue 组件中访问 this.$store property,你需要为 Vue 实例提供创建好的 store

Vuex 提供了一个从根组件向所有子组件,以 store 选项的方式“注入”该 store 的机制

new Vue({
  el: '#app',
  store: store,
})

  main添加

现在我们可以从组件的方法提交一个变更

methods: {
  increment() {
    this.$store.commit('increment')
    console.log(this.$store.state.count)
  }
}

再次强调,我们通过提交 mutation 的方式,而非直接改变 store.state.count

是因为我们想要更明确地追踪到状态的变化

 同步修改 commit

home.vue中的methods

不生效,data换成计算属性

 store里的mutation

 

 异步修改

首先要有数据 => 模拟数据 => json文件

onAjax可以不用,代码可以直接写在mounted

 

 data里记得users:[]


 全局去用 getters

 

 简写

 使用


模块化

export default { }

 

 

 

 


辅助函数

  • mapState
  • mapGetters
  • mapActions
  • mapMutations
  • 注:模块化后,开启了namespaced:true 配置后,注意方法的调用有2个参数
  • 在模块化后没有开启强制命名空间时的辅助函数写法

 

 数组(常用)

 

对象(不常用)

  • 有命名空间的写法

  

前后写法变化


提升(了解)   //自定义变量操作方法名

把所有的名字都变成变量


  开启自动化导入vueX中的模块


 案例--todolist(vuex)

 

 

 

 

 异步

 

<think>嗯,用户之前问了JavaScript复习重点,现在又问Vue3的复习。可能他正在准备前端相关的面试或者考试,需要系统地复习这些技术点。之前我给的JavaScript复习结构比较清晰,用户可能希望Vue3部分也能有类似的层次结构,方便他逐步学习和查漏补缺。 首先,我要确定用户对Vue3的了解程度。可能是已经学过Vue2,现在需要升级到Vue3,或者直接学习Vue3。考虑到Vue3和Vue2的区别挺大的,我需要重点对比两者的不同,比如Composition API和Options API的区别,响应式系统的变化等。 接下来,用户可能需要核心概念的复习,比如响应式原理、组件化、生命周期这些。Vue3中新增了setup语法、Teleport、Suspense等特性,这些都是必须涵盖的点。另外,组合式API的使用频率高,面试中常被问到,需要详细说明。 然后,用户可能关心Vue3的新特性和优化,比如性能提升、Tree-shaking支持,以及TypeScript的集成。这些都是Vue3的重要卖点,应该在复习重点中强调。 还要考虑工程实践,比如Vite的使用,Vue Router和Pinia的状态管理。这些工具和库在实际项目中常用,复习时不能忽略。 高频考点方面,用户可能想知道面试常问的问题,比如响应式原理、Composition API的优点、虚拟DOM优化等。需要整理这些点,并给出示例代码,方便用户理解。 最后,复习建议部分应该包括学习资源和实践建议,比如推荐官方文档、实战项目,以及注意TypeScript的结合使用。用户可能希望有明确的学习路径,避免浪费时间在不重要的内容上。 需要注意的是,用户可能希望回答结构清晰,分点列出,便于记忆和复习。同时,代码示例要准确,符合Vue3的语法规范,特别是组合式API的写法。另外,对比Vue2和Vue3的区别能帮助用户更快过渡,应该包含这部分内容。 总结下来,回答的结构应该包括核心概念、新特性、工程实践、高频考点和复习建议,每个部分再细分具体内容,并附上代码示例和注意事项。这样用户能系统地掌握Vue3的重点,应对面试或实际开发需求。</think>以下是针对Vue 3的**核心复习要点梳理**,按技术分层与高频考点分类,帮助系统性掌握关键知识: --- ### 一、核心概念与基础语法 #### 1. **响应式系统** - **核心原理** - 基于Proxy实现响应式(Vue 2使用`Object.defineProperty`) - `ref`与`reactive`的区别: ```javascript const count = ref(0); // 包装基本类型(通过.value访问) const state = reactive({ // 直接包装对象 name: 'Vue3' }); ``` - **响应式工具** `toRefs`(解构响应式对象)、`computed`、`watch`、`watchEffect` #### 2. **组合式API(Composition API)** - **`setup`函数** ```javascript setup(props, context) { // 在此定义响应式数据、方法 return { ... } // 暴露给模板 } ``` - **逻辑复用** 使用`useXxx`函数封装可复用逻辑(替代Vue 2的Mixins) 示例: ```javascript // useCounter.js export function useCounter() { const count = ref(0); const increment = () => count.value++; return { count, increment }; } ``` #### 3. **生命周期钩子** - Vue 3生命周期前缀改为`on`: ```javascript import { onMounted, onUpdated } from 'vue'; setup() { onMounted(() => { console.log('组件挂载') }); } ``` - 与Vue 2对应关系: `created` → `setup`中直接执行代码 `mounted` → `onMounted` --- ### 二、Vue 3新特性与优化 #### 1. **性能提升** - 虚拟DOM优化:静态节点提升(Hoist Static)、补丁标记(Patch Flag) - Tree-shaking支持:按需引入API减少打包体积 #### 2. **新组件与API** - **`<Teleport>`**:将组件渲染到DOM任意位置 ```html <teleport to="body"> <Modal /> <!-- 将弹窗渲染到body下 --> </teleport> ``` - **`<Suspense>`**:异步组件加载状态管理 ```html <Suspense> <template #default><AsyncComponent /></template> <template #fallback>Loading...</template> </Suspense> ``` - **`v-model`升级**:支持多个双向绑定 ```html <ChildComponent v-model:title="pageTitle" v-model:content="pageContent" /> ``` #### 3. **TypeScript支持** - 源码使用TypeScript重写 - 类型推断优化:组件Props、Emit类型声明更直观 ```typescript interface Props { msg: string; } const props = defineProps<Props>(); ``` --- ### 三、工程实践与高频考点 #### 1. **Vite项目配置** - 开发服务器基于ESM原生支持,热更新极速 - 配置文件`vite.config.js`常用配置: ```javascript export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': path.resolve(__dirname, 'src') } } }); ``` #### 2. **状态管理(Pinia)** - 替代Vuex的轻量级方案 - 核心概念:`defineStore`定义Store ```javascript export const useCounterStore = defineStore('counter', { state: () => ({ count: 0 }), actions: { increment() { this.count++ } } }); ``` #### 3. **Vue Router 4** - 路由定义变化: ```javascript import { createRouter, createWebHistory } from 'vue-router'; const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', component: Home } ] }); ``` - 组合式API用法: ```javascript import { useRoute, useRouter } from 'vue-router'; const route = useRoute(); // 当前路由信息 const router = useRouter(); // 路由跳转方法 ``` --- ### 四、高频面试问题与技巧 1. **Vue 3 vs Vue 2核心区别** - 响应式原理(Proxy vs Object.defineProperty) - Composition API vs Options API - 性能优化策略(如Fragment、静态提升) 2. **响应式原理深入** - 如何手动实现简易Proxy响应式系统? - `ref`为什么需要.value访问? 3. **虚拟DOM Diff算法优化** - 静态节点标记、动态属性标记 --- ### 五、复习建议 1. **优先级排序** Composition API > 响应式原理 > 新特性(Teleport/Suspense) > 性能优化 > 生态工具(Pinia/Vue Router) 2. **实战验证** - 使用Vite搭建项目,体验组合式API - 手写简易响应式系统(Proxy实现) - 对比Vue 2与Vue 3组件写法差异 3. **学习资源** - 官方文档:[Vue 3官方文档](https://vuejs.org/) - 源码分析:GitHub Vue 3源码核心模块(如reactivity) - 实战项目:TodoList、电商后台管理系统 --- **注意**:复习时重点关注组合式API的灵活性与TypeScript深度集成,同时理解底层原理(如Proxy响应式)是面试加分项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值