vue3的用法

简介:认识Vue3和项目搭建

  • Vue3优点

    • 更小的打包体积和内存
    • 页面第一次的渲染速度和更新速度更快
    • 更好的支持 TypeScript
    • 新增了 Composition API 和内置组件
  • 搭建Vue3项目

    • vue-cli创建

      • 保持跟课程脚手架版本一致4.5.17,防止引用插件出现兼容问题

        npm install -g @vue/cli@4.5.17
        
      • 查看版本,不一致时重新安装

        vue -V //查看版本
        
        全局卸载重装
        
        npm uninstall -g vue-cli
        
        npm install -g @vue/cli@4.5.17
        
      • 创建项目

        vue create vue_project
        
      • 进入项目目录启动

        npm run serve
        

1:vite 创建的项目速度快 但是默认的配置过于精简

项目工程文件介绍与Devtools安装

  • 项目文件

    • 入口文件 main.js

      • 使用 createApp 解析模板,更加小巧

        import { createApp } from 'vue'
        
        import App from './App.vue'
        
        
        
        createApp(App).mount('#app')
        
    • 组件 <template> 标签里可以插入多个根标签

  • Devtools 安装

    • 正式版的 Devtools 在Vue3项目中不生效

详解常用Composition API

简介:走进Vue3的世界—setup

  • setup

    • setup 函数是Vue3新的配置项

    • 是使用组合API的前提,数据、方法都要放到setup 函数里声明

    • 写法

      setup() {
      
        const name = "张三";
      
        const age = 18;
      
        function sayHello() {
      
          alert("你好,我是${name},今年${age}岁了");
      
        }
      
        return {
      
          name,
      
          age,
      
          sayHello,
      
        };
      
      },
      
实现数据的响应式—ref函数

简介:实现数据的响应式—ref函数

  • 定义

    • 定义一个响应式的数据
  • 基本类型数据

    • 引入 ref 函数

      import { ref } from "vue";
      
    • 创建一个包含响应式数据的引用对象( ref 对象)

      let name = ref("张三");
      
      let age = ref(18);
      
    • 操作数据

      function changePerson() {
      
        name.value = "李四";
      
        age.value = "19";
      
      }
      
  • 对象类型数据

    • 创建一个包含响应式数据的引用对象( ref 对象)

      let obj = ref({
      
        xd: "课堂",
      
        course: "vue3",
      
      });
      
    • 操作数据

      function changeCourse() {
      
        obj.value.course = "react";
      
      }
      
  • 注意

    • 可以处理基本类型数据、数组或者对象类型的数据
    • 基本类型数据的响应式是通过 Object.defineProperty() 实现
    • 对象类型数据的响应式是通过 ES6 中的 Proxy 实现
实现数据的响应式—reactive函数

简介:实现数据的响应式—reactive函数

  • 定义

    • 定义一个对象类型的响应式数据(不能处理基本类型数据)
  • 写法

    • 对象

      // 定义
      
      let obj = reactive({
      
        xd: "课堂",
      
        course: "vue3",
      
      });
      
      
      
      // 修改
      
      obj.course = "node";
      
    • 数组

      // 定义
      
      let list = reactive(["吃饭", "睡觉", "敲代码"]);
      
      
      
      // 修改
      
      list[3] = "打游戏"
      
  • reactiveref 不同点

    • 处理数据类型不同: ref 可以处理基本类型和对象(数组)类型数据,reactive 只能处理对象(数组)类型数据
    • 实现原理不同:ref 处理基本类型数据通过 Object.defineProperty() 实现,reactive 通过 Proxy 实现
    • 操作不同:ref 操作数据需要加 .value
  • 组件数据多时更加趋向使用 reactive

剖析setup函数的执行时机和两个参数

简介:详解setup函数的两个参数

  • 执行时机

    • 在生命周期函数 beforeCreate 之前执行一次,而且 setup 函数没有 this
  • 两个参数

    • props

      • 第一个参数接收父组件的值,是一个对象

        export default {
        
          props: ["mess"],   //需要props声明才能在setup收到参数
        
          setup(props) {
        
            console.log(props.mess);
        
          },
        
        };
        
    • context

      • 上下文对象

      • 触发自定义事件

        export default {
        
          emits: ["xd"], //需要emits声明才能在setup中使用
        
          setup(props, context) {
        
            function clickMe() {
        
              context.emit("xd", "子组件的值");
        
            }
        
            return {
        
              clickMe,
        
            };
        
          },
        
        };
        
掌握setup中的计算属性—computed函数

简介:详解computed函数

  • 定义

    • 通过已有的属性计算而来,跟vue2.x中的功能原理一样,使用方式有区别
  • 使用

    • 计算 ref 定义的响应式数据

      const fullName = computed({
      
        get() {
      
          return firstName.value + "-" + lastName.value;
      
        },
      
        set(value) {
      
          const arr = value.split("-");
      
          firstName.value = arr[0];
      
          lastName.value = arr[1];
      
        },
      
      });
      
    • 计算 setup定义的响应式数据

      person.fullName = computed({
      
        get() {
      
          return person.firstName + "-" + person.lastName;
      
        },
      
        set(value) {
      
          const arr = value.split("-");
      
          person.firstName = arr[0];
      
          person.lastName = arr[1];
      
        },
      
      });
      
掌握setup中的监视属性—watch函数上

简介:详解watch函数

  • 定义

    • 监听值的变化,执行相关的操作,跟vue2.x中的配置一样
  • 监听 ref 定义的数据

    • 基本类型

      // 监听一个ref定义的数据
      
      watch(num, (newValue, oldValue) => {
      
        console.log("num增加了", newValue, oldValue);
      
      },{ immediate: true, deep: true });
      
      
      
      // 监听多个ref定义的数据
      
      watch([num, num1], (newValue, oldValue) => {
      
        console.log("num增加了", newValue, oldValue);
      
      });
      
掌握setup中的监视属性—watch函数下

简介:详解watch函数

  • 监听 reactive 定义的数据

    • 使用

      • 监听对象类型

        watch(numObj, (newValue, oldValue) => {
        
          console.log("numObj变化了", newValue, oldValue);
        
        });
        
      • 监听对象中的一个基本类型属性

        watch(
        
          () => numObj.a,
        
          (newValue, oldValue) => {
        
            console.log("numObj变化了", newValue, oldValue);
        
          }
        
        );
        
      • 监听对象中的一些基本类型属性

        watch([() => numObj.a, () => numObj.b], (newValue, oldValue) => {
        
          console.log("numObj变化了", newValue, oldValue);
        
        });
        
      • 监听对象中的对象类型属性

        watch(
        
          numObj.c,
        
          (newValue, oldValue) => {
        
            console.log("numObj.c变化了", newValue, oldValue);
        
          }
        
        );
        
  • 总结

    • 实现监听生效
      • ref 定义的数据
        • 基本类型数据作为监听值
        • 对象作为监听值,需要加 .value(用的少)
      • reactive 定义的数据
        • 对象作为监听值
        • 属性作为监听值,需要放在回调函数中
认识setup中的watchEffect函数

简介:详解watchEffect函数

  • 定义

    • 在监听的回调函数中使用了属性,则监听该属性,不用在参数上指明监听哪个属性
  • 写法

    watchEffect(() => {
    
      let xd = numa.value;
    
      let xd1 = numb.value;
    
      console.log("watchEffect函数执行了");
    
    });
    
  • watch 的区别

    • 属性监听区别:
      • watch 手动添加定向的监听属性
      • watchEffect 自动监听使用到的属性
    • 初始化执行:
      • watchEffect 会初始化执行一次
  • 建议开发中使用 watch 监听,逻辑简单、依赖属性少的场景可以使用 watchEffect

掌握生命周期函数和数据处理

掌握Vue3中的生命周期函数

简介:详解Vue3中的生命周期函数

  • 创建

    创建前、后:beforeCreate、created
    
    创建:setup
    
  • 挂载

    挂载前、后:beforeMount、mounted
    
    挂载:onBeforeMount、onMounted
    
  • 更新

    更新前、后(beforeUpdate、updated)
    
    更新:onBeforeUpdate、onUpdated
    
  • 卸载

    销毁前、后:beforeDestroy、destroyed
    
    卸载:onBeforeUnmount、onUnmounted
    
掌握Vue3中的toRef和toRefs函数

简介:详解Vue3中的toRef和toRefs

  • toRef

    • 定义

      • 创建一个 ref 对象,其 value 值指向另一个对象中指定的属性
    • 写法

      const name = toRef(person, "name");
      
    • 作用

      • 将某个响应式对象的某一个属性提供给外部使用
  • toRefs

    • 定义

      • 批量创建多个 ref 对象,其 value 值指向另一个对象中指定的属性
    • 写法

      setup() {
      
        let person = reactive({
      
          name: "张三",
      
          age: 19,
      
        });
      
        return {
      
          ...toRefs(person),
      
        };
      
      },
      
    • 作用

      • 将某个响应式对象的全部属性提供给外部使用
多层嵌套的组价间的通讯—provide和inject

简介:详解provide和inject

  • 作用

    • 实现祖孙组件间的传值
  • 写法

    • 祖组件使用 provide 提供数据

      let name = ref("课堂");
      
      provide("xd", name);
      
    • 后代组件使用 inject 使用数据

      const message = inject("xd");
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值