首页 > 其他分享 >Vue3+TS笔记

Vue3+TS笔记

时间:2025-01-18 11:59:59浏览次数:3  
标签:vue name setup TS value reactive 笔记 Vue3 ref

创建工程:npm init vue@latest

Vue3

工程结构

main.js中:

引入的vue更轻量,引入vue是一个更精简版的名为createApp的工厂函数

import {
    createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')

vm实例对象上有一个mount方法,不是原型上的$mount了,用这个方法挂载vm

在组件中,组件可以没有根标签

其他的和vue2项目一样

语法

新的配置项

setup

setup是一个函数。组件中所有使用的数据、方法等全部写在setup中。

setup的两种返回值:

1.对象:

该对象中的属性、方法在模板中均可直接使用

<template>
  <p>我叫{
  { name }},已经{
  { age }}岁了</p>
  <button @click="say">click me</button>
</template>

<script>
export default {
  name: "App",
  setup() {
    let name = "abc";
    let age = 18;
  
    function say() {
      alert("你好");
    }
  
    return { name, age, say };
  },
};
</script>

2.渲染函数:

可以自定义渲染内容

import {
    h } from "vue";
export default {
   
  name: "App",
  setup() {
   
    let a = 1;
    let b = 2;
    return () => {
   
      return h("h1", "你好");
    };
  },
};

如果返回一个函数,函数返回值是字符串,那页面就展示字符串

setup方法不能是async的

不建议把vue2和3的配置混用

注意项

setup执行顺序在最早的钩子之前,没有this指向

不能通过this拿到任何东西,但可以setup(props){}接收参数

setup接收的参数来自配置项props

props可以选择接收哪些值

setup(props, context)第二个参数是上下文。

context中有attrs,是个对象,包含外部传过来但没有在props中声明的属性

context中有slots,收到的插槽内容

context中有emit,分发自定义事件的函数

vue3中父组件给子组件绑定事件,子组件中要用emits配置项声明一下,否则报警告

语法糖
<template>
  <div>{
  { abc }}</div>
</template>
  
<script setup lang="ts">
let abc = 1;
</script>

<style scoped>
</style>

在vue3的项目中一般出现两个script标签,一个有setup一个没有,setup用来配置数据等,一个用来配置组件名等

为了解决组件名可以用vite-plugin-vue-setup-extend插件解决,使用插件后再script上加name="xxx"可以定义名字

npm i vite-plugin-vue-setup-extend

![[vite_plugin_vue_setup_extend.jpg]]

ref函数

作用:定义一个响应式的数据

引用:import { ref } from "vue";

<template>
  <p>我叫{
  { name }},已经{
  { age }}岁了</p>
  <button @click="say">click me</button>
</template>
  
<script>
import { ref } from "vue";
export default {
  name: "App",
  setup() {
    let name = ref("你好");
    let age = ref(18);
  
    function say() {
      name.value = "不好";
      age.value = 20;
    }
  
    return { name, age, say };
  },
};

使用ref函数会返回一个refImpl(引用实例对象),调用的时候传一个初始值

这个对象中有一个value属性,值就是当前的值

修改它的value值vue会执行数据响应式等操作

在模板中不需要写.value,会自动处理

ref可以传递对象类型,取值不需要再.value了,因为里面不是ref了。内部借助了vue3中的新函数reactive

reactive函数

定义一个对象类型的响应式数据(基本类型用ref函数)

import {reactive} from 'vue'

reactive(源对象)返回一个代理对象(Proxy的实例对象)

它定义的响应式对象是深层的

ref和reactive的区别

ref可以定义基本类型和对象类型(有对象类型借助reactive

reactive只能定义对象类型

ref的变量必须用.value(可以用volar插件自动添加.value

reactive使用后这个对象的地址不能改变,要用Object.assign(obj,newObj)ref可以直接改,但是不能越过.valuesum = ref(9)应该是:sum.value = 9

层级较深建议用reactive,例如表单

toRefs

把一个reactive对象中的每一个键值对分成多个ref,修改这些ref的值,原来的响应式对象同步更新

<template>
  <div>{
  { obj }}</div>
  <button @click="add">click me</button>
</template>
  
<script setup lang="ts">
import { reactive, ref, toRefs } from "vue";
  
let obj = reactive({
  name: "a",
  age: 18,
});
  
let { name, age } = toRefs(obj);
  
function add() {
  name.value += "~";
  age.value += 1;
}
</script>
  
<style scoped>
</style>

toRef

toRefs同理,把一个响应式对象的某一个键的值拿出来做成ref,修改这个ref同步修改原响应式对象,语法toRef(obj, "name")

computed

import {computed} from 'vue'

传递方法:(只读)

let sum = computed(()=>{ return a+b })

传递对象:

let sum = computed({
   
	get(){
   
		return a.value+b.value;
	},
	set(val){
   
		a.value = val;
		b.value = 0;
	}
})

如果计算属性调用多次,依赖变量值没有变化,不会重新计算,直接拿之前计算过的返回值

watch

import {watch} from 'vue'

监视ref基本用法,监视地址值

const stopWatch = watch(sum, (newVal, oldVal)=>{
   
	console.log(newVal, oldVal)
})

stopWatch()

深度监视ref对象类型,加配置对象:

const stopWatch = watch(sum, (newVal, oldVal)=>{
   
	console.log(newVal, oldVal)
}, {
   
	deep: true,
	immediate: true
})

stopWatch()

注意:如果修改对象,地址相同

标签:vue,name,setup,TS,value,reactive,笔记,Vue3,ref
From: https://blog.csdn.net/2403_88110114/article/details/145224866

相关文章

  • vue3产品实现tinymce编辑器word图片粘贴上传
    要求:开源,免费,技术支持编辑器:TinyMCE需求:复制粘贴word内容图片,图文混排,图片转存前端:vue,vue2-cli,vue3-cli后端:java,jsp,springboot,asp.net,php,asp,.netcore,.netmvc,.netform平台:Windows,macOS,Linux,RedHat,CentOS,Ubuntu,中标麒麟,银河麒麟,统信UOS,信创国产......
  • Conditional render 1 of 3 components on button click (react)
    题意:在按钮点击时有条件地渲染三个组件中的一个(React)问题背景:I'mnewtoreactandbeenstrugglingtofigureouthowtorenderthecomponentsinsidethecontainerdependingonwhichbuttonhasbeenclicked.我刚接触React,一直在努力弄明白如何根据点击了哪个按......
  • 【STM32-学习笔记-7-】USART串口通信
    文章目录USART串口通信Ⅰ、硬件电路Ⅱ、常见的电平标准Ⅲ、串口参数及时序Ⅳ、STM32的USART简介数据帧起始位侦测数据采样波特率发生器Ⅴ、USART函数介绍Ⅵ、USART_InitTypeDef结构体参数1、USART_BaudRate2、USART_WordLength3、USART_StopBits4、USART_Parity5、USART......
  • 【STM32-学习笔记-8-】I2C通信
    文章目录I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元①起始条件②终止条件③发送一个字节④接收一个字节⑤发送应答⑥接收应答Ⅲ、IIC时序①指定地址写②当前地址读③指定地址读Ⅳ、MPU6050---6轴姿态传感器(软件I2C)1、模块内部电路2、寄存器地址3、软件模拟IIC①......
  • 【STM32-学习笔记-9-】SPI通信
    文章目录SPI通信Ⅰ、SPI通信概述1、SPI技术规格2、SPI应用3、硬件电路移位示意图Ⅱ、SPI时序基本单元①、起始条件②、终止条件③、交换一个字节(模式0)④、交换一个字节(模式1)⑤、交换一个字节(模式2)⑥、交换一个字节(模式3)Ⅲ、SPI时序①、发送指令②、指定地址写③、指......
  • Java初学者笔记-04、异常与泛型
    异常异常代表程序出现的问题。Error错误和Exception异常。RuntimeException运行时异常。编译时异常,提醒程序员这里的程序很容易出错。异常的基础处理抛出给上层调用者。使用try-catch处理。异常的处理方案底层异常抛出,最外层捕获异常记录异常并响应合适信息。(少见)最......
  • 前端TS 时间格式化函数
    /***时间日期转换*@paramdate当前时间,newDate()格式*@paramformat需要转换的时间格式字符串*@returns返回拼接后的时间字符串*/exportfunctionformatDate(date:Date,format:string):string{constweek:{[key:string]:string}={'0'......
  • Cesium+Vue3教程(004):基于Vue3的Cesium添加地形和自定义地形
    文章目录03-添加地形与自定义地形添加地形添加水纹和光照效果加载自定义地形03-添加地形与自定义地形添加地形实现代码:constviewer=newCesium.Viewer("cesiumContainer",{terrainProvider:Cesium.createWorldTerrain(......
  • [数据结构学习笔记15] 汉诺塔(Towers of Hanoi)
    汉诺塔是个古老的游戏,它可以用递归来解决。 关于汉诺塔的玩法和介绍,请参考这里。算法思想:1.目标是把最底下,最大的盘从起始柱子移到终点柱子2.那我们要先把除了最大的盘的其他盘子从起始柱子移到临时柱子上3.然后把最大的盘子从起始柱子移到终点柱子4.把除了最大盘的其......
  • 【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理
    近期学习了一下GMTSAR,记录一下使用过程电脑为处理器为i7-13700K,给虚拟机分配了32G内存。大致的处理流程命令如下(因为懒得截图以及复制起来简单直接写在了txt文本里)虚拟机挂载共享文件夹虚拟机的安装教程CSDN有很多,可以看最新的教程,去官网下载新版(但是要创建账号填写相关......