一起从零开始学VUE(15)初识VUE3

news2025/1/18 16:46:28

创建Vue3.0工程

  1. 使用vue cli 需要保证vue的版本在4.5以上
  2. 使用vite创建——新一代前端构建工具
  • 开发环境中,无需打包操作,可快速的冷启动
  • 轻量快速的热重载HMR
  • 真正的按需编译,不再等待整个应用编译完成

image-20221112154247670

步骤

  • 创建工程 npm init vite-app <project-name>
  • 进入工程目录 cd <project-name>
  • 安装依赖 npm install
  • 运行 npm run dev

分析工程结构

VUE2.0VUE3.0备注
import Vue from ‘vue’import {createApp} from ‘vue’引入的不再是vue构造函数,引入的是名为createApp的工厂函数
const vm = new Vue({ render:h=>h(App)})
vm.$mount(“#app”)
const app = createApp(App)
app.mount(“#app”)#挂载
app.unmount(“#app”)#卸载
创建应用实例对象,app与vm类似,但是app比vm更‘轻’
data:{
},
methods:{}
setup(){
let name = ‘111’
let age = ‘222’
function hello(){
console.log(name,age)}}
组件中所使用到的数据,方法等均配置在setup中

常用函数

setup函数

  1. setup是所有组合API的表演舞台,是一个函数
  2. 组件中所用到的数据方法等等均要配置在setup中
  3. setup函数的两种返回值:
    • 若返回一个对象,则对象中的属性,方法,在模板中均可以直接使用
    • 若返回一个渲染函数,则可以自定义渲染内容

image-20221112171439415

image-20221112171404770

  1. 注意点:
    • vue2中可以访问到setup中的属性和方法,但是在setup中无法访问到vue2的配置
    • 如果有重名,setup优先
    • setup不能是一个async函数,因为返回值不再是return对象,而是promise,模板看不到return对象中的属性。

ref函数

  1. 在模板中使用ref的值不需要通过value获取,vue会自动给ref的值加上.value

  2. 在js中使用ref的值必须使用.value获取

  3. 作用:定义一个响应式数据结构

  4. 语法:const xxx = ref(initValue)

    • 创建一个包含响应式数据的引用对象
    • js中操作数据:xxx.value
    import {ref} from 'vue'
    export default {
      setup(){
        let name = ref('张三')
        let age = ref(12)
        let job = ref({
          type:"前端",
          salary:'5k'
        })
        function changeInfo(){
          name.value = '李四'
          age.value = 18
          job.value.type = '初级前端工程师'
          job.value.salary = '7k'
        }
        return {
          name,
          age,
          job,
          changeInfo
        }
      }
    }
    

    vue3Ref函数

reactive函数

  1. 作用:定义一个对象类型的响应式数据
  2. 语法:const 代理对象 = reactive(源对象)接收一个对象(或数组),返回一个代理对象(proxy对象)
  3. reactive定义的响应式数据式深层次的
  4. 内部基于ES6的Proxy实现,通过代理对象操作源对象内部数据进行操作

与ref的对比

  • 从定义数据角度对比:
    • ref用来定义基本数据类型,reactive用来定义对象或数组类型的数据
    • ref也可以用来定义对象类型数据,内部会通过reactive转为代理对象
  • 从原理角度对比:
    • ref通过Object.defineProperty()的get与set来实现响应式(数据劫持)
    • reactive通过使用Proxy来实现响应式(数据劫持),并通过Reflect操作源对象内部的数据
  • 从使用角度对比:
    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    • reactive定义的数据,操作数据和读取数据时均不需要.value

setup的两个注意点

  • setup执行的时机:在beforeCreate之前执行一次,this是undefined
  • setup的参数:
    • props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性
    • context上下文对象
      • attrs:值为对象,包含组件外部传递过来,但没有在props配置中声明的属性,相当于this.$attrs
      • slots:收到的插槽内容,相当于this.$slots
      • emit:分发自定义事件的函数,相当于this.$emit

计算属性与监视

computed函数

  1. 与vue2中的computed配置功能一致
// 简写
let person =reactive( {
      firstName:'lin',
      lastName:'linlin'
    })
    person.fullName = computed(()=>{
      return person.firstName + person.lastName
    })
// 完整
    person.fullName = computed({
      get(){
        return person.firstName +"-"+person.lastName
      },
      set(value){
        const nameArr = value.split('-')
        person.firstName = nameArr[0]
        person.lastName = nameArr[1]
      }
      
    })

watch函数

  • 监视reactive定义的响应式数据时,oldValue无法正确获取,强制开启了深度监视,deep配置失效
  • 监视reactive定义的响应式数据中的某个属性时,deep配置有效
  1. 监听ref所定义的响应式数据
    watch(sum,(newValue,oldValue)=>{
      console.log(newValue,oldValue);
    },({immediate:true}))
  1. 监视ref所定义的多个响应式数据
    watch([sum,msg],(newValue,oldValue)=>{
      console.log(newValue,oldValue);
    },({immediate:true}))
  1. 监视reactive所定义的一个响应式数据的全部属性,此处无法正确获取oldValue,强制开启了深度监视,deep配置无效
    watch(person,(newValue,oldValue)=>{
      console.log(newValue,oldValue);
    },({immediate:true}))
  1. 监视reactive所定义的一个响应式数据中的某个属性
    watch(()=>person.name,(newValue,oldValue)=>{
      console.log(newValue,oldValue);
    },({immediate:true}))
  1. 监视reactive所定义的一个响应式数据中的某些属性

        watch([()=>person.name,()=>person.age],(newValue,oldValue)=>{
          console.log(newValue,oldValue);
        },({immediate:true}))
    

特殊情况

    watch(()=>person.name,(newValue,oldValue)=>{
      console.log(newValue,oldValue);
    },({immediate:true}))

当监视的是reactive所定义的对象中的某个属性时,deep配置有效

watchEffect函数

与watch相比,不需要指定需要监视哪个属性,监视的回调中用到哪个属性,就会监视哪个属性。watchEffect注重的是过程,没有返回值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装达梦数据库最佳实践

达蒙数据库 数据库安装部署 下载地址&#xff1a;产品下载 | 达梦数据库 安装博客地址&#xff1a;安装前准备 | 达梦技术文档 到官网docker部署那一章节&#xff0c;下载镜像tar包&#xff0c;上传到服务器上后&#xff0c;运行下面的命令 docker安装启动脚本&#xff1a;…

window10录屏怎么录?看完这篇文章,快速掌握

Windows系统的电脑用户有不少&#xff0c;有时我们需要录制屏幕与朋友分享电脑屏幕上的内容&#xff0c;windows10录屏怎么录&#xff1f;其实windows10录屏的操作很简单&#xff0c;今天小编就和大家分享详细的windows10录屏的操作步骤。 一、使用QQ对windows10录屏 很多小伙…

java计算机毕业设计基于安卓Android的跨校区班车乘车预约系统APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把班车乘车预约与现在网络相结合,利用java 技术建设班车乘车预约APP,实现谷惠农产品线上销售的信息化。则对于进一步提高乘车发展,班车乘车预约经验能起到不少的促进作用。 班车乘车预约APP能够通过互联网得到广泛的、全面…

SSM整合xml方式(精简版)

注&#xff1a;本次只介绍ssm整合的核心部分&#xff0c;不重要的部分进行了省略 1、maven核心依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2…

BEPUphysicsint碰撞事件详解

上一节我们給大家介绍了BEPUphysicsint的基本使用,在游戏开发中我们经常要使用物理引擎的事件&#xff0c;所以本节我们详细的讲解BEPUphysicsint 的物理事件。此物理引擎会产生了碰撞事件与非碰撞事件&#xff0c;碰撞事件大家好理解&#xff0c;非碰撞事件例如: 物理Entity的…

携程季报图解:营收69亿同比增29% 净利为2.45亿

雷递网 雷建平 12月15日携程集团有限公司&#xff08;纳斯达克&#xff1a;TCOM&#xff1b;香港联交所&#xff1a;9961&#xff09;今日发布财报。财报显示&#xff0c;携程2022年第三季度营收为69亿元&#xff0c;同比增长29%&#xff1b;净利润为2.45亿元&#xff1b;经调整…

原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑

前言 提到元素拖拽&#xff0c;通常都会先想到用 HTML5 的拖拽放置 (Drag 和 Drop) 来实现&#xff0c;它提供了一套完整的事件机制&#xff0c;看起来似乎是首选的解决方案&#xff0c;但实际却不是那么美好&#xff0c;主要是它的样式太过简陋&#xff0c;无法实现更高级的用…

spring boot实现文件上传和下载

文章目录 spring boot实现文件上传 1.文件上传 2.文件下载 1.文件上传 1.代码如下&#xff1a; package com.example.demo; import org.omg.PortableInterceptor.ServerRequestInfo; import org.springframework.stereotype.Controller; import org.springframework.we…

k8s 综合部署练习(针对负载均衡+外网访问web)

部署需求 &#xff08;1&#xff09;Kubernetes 区域可采用 Kubeadm 方式进行安装。 &#xff08;2&#xff09;要求在 Kubernetes 环境中&#xff0c;通过yaml文件的方式&#xff0c;创建Deployment控制器和4个Nginx Pod副本&#xff0c;并进入容器中修改index.html文件内容&…

【12月13日更新半决赛预测】用二元泊松模型预测2022年世界杯淘汰赛结果

用二元泊松模型预测2022年世界杯淘汰赛结果 网上有很多文章用双泊松&#xff08;Double Poisson&#xff09;模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷&#xff0c;那就是它假设比赛中两队的比分是条件独立的。而我们都知道&#xff0c;在对抗性比赛中&…

2022年拼多多元旦节会搞活动吗?拼多多有节日活动吗?

2022年拼多多元旦节会搞活动吗?拼多多有节日活动吗? 离春节只有一个月半的时间了&#xff0c;而且双十二也已经过了。要想等平台的活动&#xff0c;就只有元旦节和年货节了。有小伙伴想知道&#xff0c;拼多多元旦节会搞活动吗? 一、拼多多有节日活动吗? 拼多多购物节主要…

数据服务门槛再提升,这个“TOP1玩家”凭何再度领军?

在人工智能领域&#xff0c;数据的重要程度正在迅速提升。 根据ML大牛吴恩达提出的著名二八定律&#xff1a;80%数据20%模型更好的AI。他认为&#xff0c;一个机器学习团队80%的工作应该放在数据准备上&#xff0c;确保数据质量是最重要的工作&#xff0c;每个人都知道应该如此…

什么是元数据

元数据 元数据是描述数据的数据&#xff0c;关于数据的组织、数据域及其关系&#xff0c;本质上是关于数据的信息。元数据以数字化方式描述企业的数据、流程和应用程序&#xff0c;为企业数字资产的内容提供了上下文&#xff0c;使得数据更容易理解、查找、管理和使用。 元数据…

计算机毕设Python+Vue校园跳蚤平台(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Nginx教程(1)

文章目录1.1 简介1.2 常见的服务器1.3 反向代理1.4 Nginx的安装与运行1.5 Nginx的进程模型1.6 Nginx处理Web请求机制解析1.7 Nginx核心配置文件nginx.conf解析1.8 Nginx常用命令解析1.9 Nginx日志切割1.10 Nginx为静态资源提供服务1.11 使用Gzip压缩提高请求效率1.12 location匹…

React源码分析(二)渲染机制

准备工作 为了方便讲解&#xff0c;假设我们有下面这样一段代码&#xff1a; function App(){const [count, setCount] useState(0)useEffect(() > {setCount(1)}, [])const handleClick () > setCount(count > count)return (<div>勇敢牛牛, <sp…

java计算机毕业设计基于安卓Android的急救服务APP

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,急救服务系统就是信息时代变革中的产物之一。 任何系统都要遵循系统设…

Android9.0 Fiddler 模拟器抓包

目录 一、生成Fiddler证书并安装 二、制作证书 三、adb的配置 四、安装证书到Android手机 五、抓包 六、总结 一、生成Fiddler证书并安装 1.到官网下载fiddler插件 https://www.telerik.com/fiddler/add-onshttps://www.telerik.com/fiddler/add-ons 2.官网插件工具很多&a…

TCP/IP HTTP WebSocket Socket 路由

最近在写一个上位机&#xff0c;需要将采集到的数据上传到云平台&#xff0c;然后就考虑到使用WebSocket实现&#xff0c;但是WebSocket和Socket有啥区别&#xff0c;这两个东西分别是个啥&#xff0c;咱也不清楚&#xff0c;然后就查资料&#xff0c;发现有好多之前想了解但是…

Java面试基础篇-IO

UNIX提供5种I/O模型 var code “7cfcb088-556d-478a-b21d-12b255236dbd” BIO模型 在进程空间调用recvfrom时被阻塞,直到有数据才返回。 NIO模型 调用recvfrom时先返回EWOULDBLOCK错误&#xff0c;然后轮询是否有数据。 I/O复用 linux提供select/poll&#xff0c;其支…