【Vue3】初始化和Composition API(组合式)

Vue3

      • 创建Vue3.0工程
          • 查看自己的vue/cli版本,使用Vue/cli创建
          • 使用vite创建
      • 查看Vue3.0工程
          • vue.config.js中,关闭语法检查,
          • main.js讲解
          • app.vue讲解
      • 常用的Composition API(组合式)
          • 1.拉开序幕的setup
            • 返回对象
            • 返回渲染函数
            • 注意事项,
          • 2,ref函数
            • 1,他的实例是RefImpl
            • 2,向里一层,看value
            • 3,所以,修改变量得用.value
            • 4,修改对象的时候
          • 3,reactive函数
            • 修改数组
            • 优化后的reactive
          • 4,reactive对比ref

创建Vue3.0工程

查看自己的vue/cli版本,使用Vue/cli创建
  • cmd,vue -V,要在4.5.0版本以上
  • vue create 项目名
  • 创建Vue3项目
使用vite创建
  • 新一代前端构建工具
  • 开发环境下,无需打包,可快速冷启动
  • 轻量快速的热重载(HMR)
  • 真正的按需编译

开始创建

  • npm init vite-app 项目名
  • cd 项目名
  • npm i
  • npm run dev

查看Vue3.0工程

vue.config.js中,关闭语法检查,
  • 防止编译器报错,调试麻烦,记得重启
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave:false//关闭语法检查
})
main.js讲解
  • vue2中
// vue2中,借助render,传入h,h就是外壳app
new Vue({render: (h) => h(App)
}).$mount('#app')
  • vue3中,通过引用createApp,无需通过new,可以直接调用
import { createApp } from 'vue'
import App from './App.vue'
  • 创建应用实例对象
const app = createApp(App)
  • 挂载
app.mount("#app")
  • 卸载
app.unmount("#app")
app.vue讲解

VUE3组件中的模板结构可以没有根标签
VUE2中没有会报错

常用的Composition API(组合式)

1.拉开序幕的setup
  • vue3,中的新的配置项。值是一个函数
  • 在vue3中,组件中所用到的数据,方法等,均要配置在setup中
  • 在vue2中,配置数据在data,配置方法在methods,
  • setup两种返回值
  • 1,若返回一个对象,则对象中的属性,方法在模板中均可直接使用
  • 2,若返回一个渲染函数,则自定义渲染内容
返回对象

在这里插入图片描述

<template><!-- VUE3组件中的模板结构可以没有根标签 --><h1>我是{{name}},{{age}}</h1><button @click="sayword">点我</button>
</template><script>
export default {name: 'App',setup(){let name ="乞力马扎罗"let age =18function sayword(){console.log(`你好${name},我${age}`)}return{name,age,sayword}},
}
</script><style></style>
返回渲染函数

在这里插入图片描述

<template><!-- VUE3组件中的模板结构可以没有根标签 --><h1>我是{{name}},{{age}}</h1><button @click="sayword">点我</button>
</template>
<script>
import {h} from "vue"
export default {name: 'App',setup(){let name ="乞力马扎罗"let age =18function sayword(){console.log(`你好${name},我${age}`)}return ()=>h('button','看我强制替换你')},
}
</script><style></style>
注意事项,
  • vue2和vue3可以混合用,但不介意,vue2中调用setup中数据可以,但vue3的setup调用vue2会报错
  • 如果重名,setup优先
  • setup不能是async函数
2,ref函数
  • ref不是属性,得import引入
  • 在模板里面使用不用.value,当发现是ref对象的时候,自动.value了
  • 创建了一个包含响应式的引用对象(简称ref对象)
  • 修改变量的时候,是通过.value
  • 修改对象的时候, vue3中,把Proxy封装到了ractive函数
import {ref} from "vue"
  • 先打印一下经过ref后的值,长什么样子!
 setup() {let name =ref("乞力马扎罗"); let age = ref(18);function sayword() {console.log(name,age);}return {name,age,sayword,};},

在这里插入图片描述

1,他的实例是RefImpl
  • 代表reference(引用) implement(实现)
  • 也叫引用实现的实例,叫引用对象
2,向里一层,看value
  • set和get被放在原型里面
    在这里插入图片描述
3,所以,修改变量得用.value

在这里插入图片描述

 setup() {let name =ref("乞力马扎罗"); let age = ref(18);function sayword() {name.value="罗曼蒂克"age.value=42console.log(name,age);}return {name,age,sayword,};},
4,修改对象的时候

在这里插入图片描述

  • object本身是reflmpl,把传入的对象变成了Proxy的代理对象
  • 修改的时候,一个value即可更新里面所有的,不用两个value
<template><h1>我是{{ name }},{{ age }}</h1><h1>我是{{ job.type }},{{ job.salus}}</h1><button @click="sayword">点我更新信息</button>
</template><script>
import {ref} from "vue"
export default {name: "App",setup() {let name =ref("乞力马扎罗"); let age = ref(18);let job = ref({type:"前端",salus:"30k"});function sayword() {name.value="罗曼蒂克"age.value=42job.value.type="后端"console.log(name,age);}return {name,age,job,sayword,};},
};
</script><style>
</style>
3,reactive函数
  • 通过这个对象就不用.value更新了
  • 作用,定义一个对象类型的响应式数据,(基本类似采用ref)
  • 语法,const 代理对象 = reactive(源对象),接收一个对象或者数组,返回一个代理对象(Proxy对象)
  • reactive定义的响应式数据是“深层次”的
  • 内部其实是基于ES6的Proxy实现,通过代理对象操作源对象内部数据进行操作
<script>
import {reactive, ref} from "vue"
export default {name: "App",setup() {let name =ref("乞力马扎罗"); let age = ref(18);let job = reactive({type:"前端",salus:"30k"});function sayword() {name.value="罗曼蒂克"age.value=42job.type="后端"}return {name,age,job,sayword,};},
};
</script>
修改数组
<template><!-- VUE3组件中的模板结构可以没有根标签 --><h1>我是{{ name }},{{ age }}</h1><h1>我是{{ job.type }},{{ job.salus}}</h1><h1>我是{{ list[0] }}</h1><button @click="sayword">点我更新信息</button>
</template><script>
import {reactive, ref} from "vue"
export default {name: "App",setup() {let name =ref("乞力马扎罗"); let age = ref(18);let job = reactive({type:"前端",salus:"30k"});let list = reactive([1,2,3]);function sayword() {name.value="罗曼蒂克"age.value=42list[0]=4job.type="后端"}return {name,age,job,list,sayword,};},
};
</script><style>
</style>
优化后的reactive
<template><h1>我是{{ person.name }},{{ person.age }}</h1><h1>我是{{ person.job.type }},{{ person.job.salus }}</h1><h1>我是{{ person.list[0] }}</h1><button @click="sayword">点我更新信息</button>
</template><script>
import { reactive, ref } from "vue";
export default {name: "App",setup() {let person = reactive({name: "乞力马扎罗",age: 18,job: {type: "前端",salus: "30k",},list: [9],});function sayword() {console.log(person)person.name='罗曼蒂克'person.list[0]='罗曼蒂克'}return {person,sayword,};},
};
</script><style></style>
4,reactive对比ref

从定义的角度

  • ref用来定义 基本数据类型
  • reactive用来定义,对象(或数组)类型数据
  • 当然,ref也可以定义对象或者数据类型,但他内部会自动通过reactive转为代理对象

从原理角度:

  • ref通过Object。defineProperty()的get和set来实现响应式(数据劫持)
  • reactive通过使用es6里的Proxy来实现响应式(数据劫持),并通过reflect操作源对象内部的数据

从使用的角度

  • ref定义的数据,操作数据需要.value,读取数据时模板中直接读取,不需要.value
  • reactive定义的数据,操作数据与读取数据,均不需要.value

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

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

相关文章

Android Glide预加载preload ,kotlin

Android Glide预加载preload ,kotlin val imageView findViewById<ImageView>(R.id.image_view)Glide.with(this).asBitmap().load(image_file.path).signature(ObjectKey(image_file.path)).addListener(object : RequestListener<Bitmap> {override fun onLoadF…

Unity UnityWebRequest使用http与web服务器通讯

一、搭建客户端与服务器http通讯 1.在Nodejs中文官网Node.js 中文网 (nodejs.com.cn)&#xff0c;下载并安装Nodejs 2.在项目文件夹下新建WebServer文件夹&#xff0c;打开CMD窗口&#xff0c;在WebServer文件夹路径下安装express 3.在WebServer文件夹中新建main.js文件&#…

Pytorch基本使用—参数初始化

深度学习模型参数初始化是指在训练深度神经网络时&#xff0c;对网络的权重和偏置进行初始化的过程。合适的参数初始化可以加速模型的收敛&#xff0c;并提高模型的性能。 ✨ 1 基本介绍 在深度学习中&#xff0c;常用的参数初始化方法有以下几种&#xff1a; 零初始化&#…

哈希结构(详解)

目录 哈希表 哈希表原理 散列函数 哈希冲突和处理的办法 哈希集合 哈希集合的实现 哈希映射 哈希映射的基本操作 哈希映射的实现 哈希表 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据关键码值(Key)而直接进行访问的数据结构 …

1、QT新建工程

本章内容&#xff1a;本章建立一个简单的QT工程&#xff0c;并且对工程目录进行重新管理&#xff0c;再进行windows端打包部署&#xff0c;方便开发 一、建立工程 创建windows UI应用程序工程 到此&#xff0c;工程就已经建立完毕能正常运行了… 二、工程目录重新管…

ES(1)简介和安装

文章目录 简介倒排索引 安装 简介 ES是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。 和关系型数据库大致关系如下: ES7.x中废除掉Type&#xff08;表&#xff09;的概念 倒排索引 要知道什么是倒排索引&#xff0c;就要先知道什么是正排索引 idcontent100…

Django 分布式路由

简介&#xff1a; Django中&#xff0c;主路由配置文件(urls.py)可以不处理用户具体路由&#xff0c;主路由的配置文件可以配置成做请求的分发&#xff08;分布式请求处理&#xff0c;分发到子路由而不是具体的视图函数&#xff09;。具体的请求可以由各自的应用来处理。 步骤…

(vue)整个页面添加背景视频

(vue)整个页面添加背景视频 App.vue <template><div id"app" :class"[platform]"><video src"./assets/images/top/bg-video-711.mp4" autoplay muted loop class"bg"></video><router-view /></di…

校园网WiFi IPv6免流上网

ipv6的介绍 IPv6是国际协议的最新版本&#xff0c;用它来取代IPv4主要是为了解决IPv4网络地址枯竭的问题&#xff0c;也在其他很多方面对IPv4有所改进&#xff0c;比如网络的速度和安全性。 IPv4是一个32位的地址&#xff0c;随着用户的增加在2011年国家报道说IPv4的网络地址即…

QT开发技巧之嵌入式linux QT的QCombobox显示空白的问题

1.问题 开发平台&#xff1a;imx6ull qt版本&#xff1a;5.12.9 在嵌入式linux上运行的qt&#xff0c;QCombobox显示空白&#xff0c;不能显示其中的文本内容 2.解决办法 选中QCombobox&#xff0c;在属性栏中将foucsPolicy由WheelFocus改成NoFocus就好了

scrapy ---分布式爬虫

导模块 pip install scrapy-redis 原来scrapy的Scheduler维护的是本机的任务队列&#xff08;待爬取的地址&#xff09;本机的去重队列&#xff08;放在集合中&#xff09;---》在本机内存中 如果把scrapy项目&#xff0c;部署到多台机器上&#xff0c;多台机器爬取的内容是重…

Win10电脑开机PIN码怎么取消?

有的用户稀里糊涂的设置了PIN码之后&#xff0c;在开机时发现多了个PIN码&#xff0c;但又不知道电脑PIN码是什么意思&#xff0c;也不清楚开机PIN码怎么取消。您可以通过阅读以下内容&#xff0c;以了解什么是PIN以及如何取消PIN码。 PIN码是一种快捷登录密码方式&#xff0c;…

云计算的学习(六)

六、云计算的发展趋势 1.云计算相关领域介绍 1.1物联网 物联网来源于互联网&#xff0c;是万物互联的结果&#xff0c;是人和物、物和物之间产生通信和交互。 物联网主要技术&#xff1a; RFID技术&#xff08;射频识别技术&#xff09;传感器技术嵌入式系统技术 1.2大数据…

win系统电脑在线打开sketch文件的方法

自Sketch诞生以来&#xff0c;只有Mac版本。Windows计算机如何在线打开Sketch文件&#xff1f; 即时设计已经解决了你遇到的大部分问题&#xff0c;不占用内存也是免费的。 您可以使用此软件直接在线打开Sketch文件&#xff0c;完整预览并导出CSS、SVG、PNG等&#xff0c;还具…

【工具推荐】企业微信、企业飞书接口调用工具

github地址: GitHub - fasnow/idebug: 企业微信、企业飞书接口调用工具。 简介 企业微信、企业飞书接口调用工具。 使用方法 wechat模块 使用use wechat 选择模块。 首先设置corpid和corpsecret&#xff0c;如有需要可以设置代理&#xff0c;之后再执行run命令。 导出通信…

微信小程序设置底部导航栏

微信小程序设置底部导航栏 1、前言2、图标准备3、小程序tabbar设置 1、前言 我们先来看下效果图&#xff1a; 注意&#xff1a; 导航栏数量最多5个&#xff0c;最少两个。 2、图标准备 阿里图标库 http://www.iconfont.cn/collections/show/29 我们进入该网站&#xff0c;选…

在SpringBoot中对RabbitMQ三种使用方式

基于API的方式 1.使用AmqpAdmin定制消息发送组件 Autowiredprivate AmqpAdmin amqpAdmin;Testpublic void amqpAdmin(){//1.定义fanout类型的交换器amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));//2.定义两个默认持久化队列,分别处理email和sm…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址&#xff0c;确定你想要的版本 然后下载即可 &#xff08;我选则的是6.2.6&#xff09; 然后下载 下载后 把这个文件解压&#xff0c;放在自己想要放在的位置 2 打开终端 输入对应的…

MyBatis查询数据库(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了&#xff0…

论文浅尝 | 少样本学习的语言模型的持续训练

笔记整理&#xff1a;王贵涛&#xff0c;东南大学硕士&#xff0c;研究方向为自然语言处理 链接&#xff1a;https://github.com/UIC-Liu-Lab/CPT 一、动机 克服灾难性遗忘&#xff08;CF&#xff09;是持续学习&#xff08;CL&#xff09;的一个主要目标。目前有许多方法&…