• vuex基础教学(1)


    1.性能的提升

    • 打包大小减少41%

    • 初次渲染快55%, 更新渲染快133%

    • 内存减少54%

    2.源码的升级

    • 使用Proxy代替defineProperty实现响应式

    • 重写虚拟DOM的实现和Tree-Shaking

    3.支持TypeScript

    • Vue3可以更好的支持TypeScript

    4.新的特性

    1. Composition API(组合API)

      • setup配置
      • refreactive
      • watchwatchEffect
      • provide与 inject
    2. 新的内置组件

      • Fragment
      • Teleport
      • Suspense
    3. 其他改变

      • 新的生命周期钩子
      • data 选项应始终被声明为一个函数
      • 移除keyCode支持作为 v-on 的修饰符

    1.创建一个Vue项目

     
    
    1. ## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上

    2. vue --version

    3. ## 安装或者升级你的@vue/cli

    4. npm install -g @vue/cli

    5. ## 创建Vue项目,选择Vue3

    6. vue create vue_test

    7. ## 启动

    8. cd vue_test

    9. npm run serve

    当然也可以用可视化面板创建

    创建项目的时候预设选择Vue3即可

    2. 使用 vite 创建

    官方文档:v3.cn.vuejs.org/guide/insta…

    vite官网:vitejs.cn

    • 什么是vite?—— 是Vue团队打造的新一代前端构建工具。

    • 优势如下:

      • 开发环境中,无需打包操作,可快速的冷启动。
      • 轻量快速的热重载(HMR)。
      • 真正的按需编译,不再等待整个应用编译完成。
    • 传统构建 与 vite构建对比:传统构建模式,是将所有资源都打包好,再上线,而Vite有点按需加载的意思

    • 接下来我们就用Vite来创建一个Vue3的项目

    1. ## 创建工程
    2. npm init vite-app lee_vue3
    3. ## 进入工程目录
    4. cd lee_vue3
    5. ## 安装依赖
    6. npm install
    7. ## 运行
    8. npm run dev
    • 构建速度明显vite快。

    • 3、分析文件目录

    • Vue2项目的main.js

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. Vue.config.productionTip = false
    4. new Vue({
    5. render: h => h(App),
    6. }).$mount('#app')

    App.vue

    我们再来看看组件

    template标签里可以没有根标签了 

    1. <template>
    2. <img alt="Vue logo" src="./assets/logo.png">
    3. <HelloWorld msg="Welcome to Your Vue.js App"/>
    4. template>

    3. 常用的Composition API

    ① setup

    1. 理解:Vue3.0中一个新的配置项,值为一个函数。
    2. setup是所有Composition API(组合API)“ 表演的舞台 ”
    3. 组件中所用到的:数据方法等等,均要配置在setup中。
    4. setup函数的两种返回值:
      1. 若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。(重点关注!)
      2. 若返回一个渲染函数:则可以自定义渲染内容。(了解) (不常用)
    1. <template>
    2. <h1>博主的信息h1>
    3. <h2>姓名:{{name}}h2>
    4. <h2>年龄:{{age}}h2>
    5. <h2>性别:{{sex}}h2>
    6. <button @click="sayInfo">显示信息button>
    7. template>
    8. <script>
    9. // import {h} from 'vue'
    10. export default {
    11. name: "App",
    12. //此处只是测试一下setup,暂时不考虑响应式的问题。
    13. setup(){
    14. // 数据
    15. let name = "张三"
    16. let age = 18
    17. let gender = "男"
    18. // 方法
    19. function sayInfo(){
    20. alert(`你好${name},吃饭了吗`)
    21. }
    22. return {
    23. name,age, gender,sayInfo
    24. }
    25. // return ()=> h('h1','张三')
    26. }
    27. };
    28. script>

    如果返回的是渲染函数

    那你在template里写的模板都不奏效了,页面渲染的就是你写的h函数中的

    1. 注意点:
      1. 尽量不要与Vue2.x配置混用
        • Vue2.x配置(data、methos、computed...)中可以访问到setup中的属性、方法。
        • 但在setup中不能访问到Vue2.x配置(data、methos、computed...)。
        • 如果有重名, setup优先。
      2. setup不能是一个async函数,因为返回值不再是对象, 而是promise, 模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

    ② ref 函数

    • 作用: 定义一个响应式的数据
    • 语法: const xxx = ref(initValue)
      • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)
      • JS中操作数据: xxx.value
      • 模板中读取数据: 不需要.value,直接:
        {{xxx}}
    • 备注:
      • 接收的数据可以是:基本类型、也可以是对象类型。
      • 基本类型的数据:响应式依靠的是类上的gettersetter完成的(我们等下看下源码你就知道了)。
      • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。
    1. <template>
    2. <h1>博主的信息h1>
    3. <h2>姓名:{{ name }}h2>
    4. <h2>年龄:{{ age }}h2>
    5. <h2>职业: {{ job.type }}h2>
    6. <h2>工资:{{ job.sex }}h2>
    7. <button @click="sayInfo">显示信息button>
    8. <button @click="changeInfo">修改信息button>
    9. template>
    10. <script>
    11. import { ref } from "vue";
    12. export default {
    13. name: "App",
    14. setup() {
    15. // 数据
    16. let name = ref("张三");
    17. let age = ref(18);
    18. let job = ref({
    19. type: "前端工程师",
    20. sex: "30K",
    21. });
    22. // 方法
    23. function sayInfo() {
    24. alert(`你好${name.value},薪水也${job.value.sex}这么高`);
    25. }
    26. function changeInfo() {
    27. name.value = "三十年后的张三";
    28. age.value = 58;
    29. job.value.type = "退休老干部";
    30. job.value.sex = "80K";
    31. }
    32. return {
    33. name,
    34. age,
    35. job,
    36. sayInfo,
    37. changeInfo,
    38. };
    39. },
    40. };
    41. script>

    通过看源码可以知道调用ref会返回一个RefImpl的实例对象,是reference引用和implement实现的缩写,RefImpl类中有getter和setter可以检测到数据的变化

    ③ reactive函数

    • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)
    • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)
    • reactive定义的响应式数据是“深层次的”。
    • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

    1. <template>
    2. <h1>博主的信息h1>
    3. <h2>姓名:{{ lee.name }}h2>
    4. <h2>年龄:{{ lee.age }}h2>
    5. <h2>职业: {{ lee.job.type }}h2>
    6. <h2>工资:{{ lee.job.salary }}h2>
    7. <h2>爱好:{{ lee.hobby }}h2>
    8. <h3>测试数据:{{ lee.job.a.b.c }}h3>
    9. <button @click="changeInfo">修改信息button>
    10. template>
    11. <script>
    12. import { reactive } from "vue";
    13. export default {
    14. name: "App",
    15. setup() {
    16. // 数据
    17. let lee = reactive({
    18. name: "张三",
    19. age: 28,
    20. hobby: ["写博客", "研究前端", "看电影"],
    21. job: {
    22. type: "前端工程师",
    23. salary: "30K",
    24. a: {
    25. b: {
    26. c: 111,
    27. },
    28. },
    29. },
    30. });
    31. // 方法
    32. function changeInfo() {
    33. lee.name = "三十年后的张三";
    34. lee.age = 58;
    35. lee.job.type = "退休老干部";
    36. lee.job.salary = "80K";
    37. lee.job.a.b.c = 222;
    38. // 直接通过数组下标修改,可以触发响应式
    39. lee.hobby[0] = "看小说";
    40. }
    41. return {
    42. lee,
    43. changeInfo,
    44. };
    45. },
    46. };
    47. script>

  • 相关阅读:
    深入解读[面向对象五大设计原则]
    java面试题总结
    网络 IO 演变过程
    Spark 中数据结果传输到 Driver 端
    2023-09-20力扣每日一题-水题
    Java-随机数据生成器(造数据)
    vue3组件外使用route
    亲戚3.5W入职华为后,我也选择了转行……
    python学习笔记——初识列表
    Python进阶:反射
  • 原文地址:https://blog.csdn.net/Taojia9958/article/details/126147886