vue3基础知识的简单应用

news2024/11/15 14:09:04

vue3基础知识的简单应用

  • vue3基础知识的简单应用
  • 运行结果

vue3基础知识的简单应用

父组件代码

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App" :foo="'foo'" v-model:bar="bar"/>
    <p>{{ bar }}</p>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import { provide, ref } from 'vue'

export default {
  name: 'HomeView',
  components: {
    HelloWorld
  },
  setup() {
    // 接受两个参数:第一个参数是要注入的 key,可以是一个字符串或者一个 symbol,第二个参数是要注入的值
    // 建是foo,值是bar
    provide('foo', 'bar')
    const count = ref(0)
    provide('count', count)
    const bar = ref('bar')
    return {
      bar
    }
  }
}
</script>

子组件代码

<template>
    <div class="hello">
        <p>ref变量:{{ count }}</p>
        <p>computed:{{ testComputed }}</p>
        <p>customRef:{{ text }}</p>
        <input v-model="text" />
        <vNode></vNode>
    </div>
</template>

<script setup>
import { ref, computed, reactive, watchEffect, watch, toRef, toRefs, shallowRef, triggerRef, toRaw, inject, h } from 'vue'
import { useDebouncedRef } from './customRef.js'
const text = useDebouncedRef('hello')
const count = ref(0)
console.log('ref变量count.value', count.value)
const countObj = reactive({ count: 1 })
console.log('reactive对象', countObj.count)

// ref用来代理对象,获取对象浅层需要用.value,获取深层直接访问即可,因为ref的深层是用reactive来实现的
const refObj = ref({ count: { a: 1 } })
console.log('ref代理对象', refObj.value.count, refObj.value.count.a)
const a = 2
// computed 返回的值也是ref类型,需要通过.value来获取
const testComputed = computed(() => {
    return a + 1
})
console.log('computed', testComputed.value) // 3
const watchReactive = reactive({ count: {a: 2, b: { c: 4 }}})

// watchEffect:watchEffect会自动监听watchEffect回调里面的属性
// 副作用函数的参数onCleanup也是一个函数,用来注册清理回调。清理回调会在该副作用下一次执行前被调用,停止监听器的时候也会调用
// 第二个参数是一个可选的选项,可以用来调整副作用的刷新时机或调试副作用的依赖,默认情况下,侦听器将在组件渲染之前执行。设置 flush: 'post' 将会使侦听器延迟到组件渲染之后再执行。详见回调的触发时机。在某些特殊情况下 (例如要使缓存失效),可能有必要在响应式依赖发生改变时立即触发侦听器。这可以通过设置 flush: 'sync' 来实现。然而,该设置应谨慎使用,因为如果有多个属性同时更新,这将导致一些性能和数据一致性的问题
// 返回值,返回一个可以停止监听器的函数

let watchEffectCount = ref(0)
const stopwatchEffectCount = watchEffect(
    (onCleanup) => {
        let t = watchEffectCount.value
        console.log('监听watchEffect', watchEffectCount.value)
        onCleanup(() => {
            // 在回调出发
            console.log('6666', t)
        })
    },
    {
        flush: 'post'
    }
)

// watch
// 参数1:第一个参数是侦听器的源。这个来源可以是以下几种:
// 一个函数,返回一个值
// 一个 ref
// 一个响应式对象
// ...或是由以上类型的值组成的数组
// 第二个参数是在发生变化时要调用的回调函数
// 第三个可选的参数是一个对象,immediate、deep、flush、onTrack / onTrigger
// 返回值,停止监听函数
// PS:监听reactive对象的时候,默认开启深度建通,且无法设置为deep:false
watch(
    watchReactive,
    () => {
        console.log('watch监听watchEffectCount', watchReactive.count.a)
    },
    { immediate: true, flush: 'post', deep: false }
)

setTimeout(() => {
    stopwatchEffectCount() // 停止侦听 则调用该返回值即可
}, 1000 * 5)

// toRef
// 基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同
// 将ref或者reactive对象的属性转化成ref对象,并保持同步,相当于用ref定义一个对象,浅层是ref,深层是reactive
const _toRef = toRef(watchReactive, 'count')
// toRefs,将一个对象转化为react对象
const _toRefs = toRefs(watchReactive)
watchReactive.count.a = 4
console.log('toRef', _toRef.value.a)
console.log('_toRefs', _toRefs.count.value.b.c)

// shallowRef:ref() 的浅层作用形式,只有更改_shallowRef.value的时候才会出发监听
const _shallowRef = shallowRef({ count: 1 })

// triggerRef
// 强制触发依赖于一个浅层 ref 的副作用,这通常在对浅引用的内部值进行深度变更后使用
// 会触发更改监听
watchEffect(() => {
  console.log('triggerRef', _shallowRef.value.count)
})
// 不会触发更改监听
_shallowRef.value.count = 2
console.log('_shallowRef1', _shallowRef.value)

triggerRef(_shallowRef)
_shallowRef.value = { count: 3 }
console.log('_shallowRef2', _shallowRef.value)
watchEffectCount.value++
console.log('computed变量testComputed', testComputed.value)

// toRaw
// 根据一个 Vue 创建的代理返回其原始对象。
const toRawOrigin = { a: 2}
const _toRawOrigin = reactive(toRawOrigin)
const _toRaw = toRaw(_toRawOrigin)
toRaw.a = 4
console.log('toRaw1', _toRaw.a)

console.log('toRaw', toRaw(_toRawOrigin) === toRawOrigin) // true

// 生命周期
const inject1 = inject('foo')
console.log('inject1', inject1)

// defineProps() 和 defineEmits()
const props = defineProps({
  foo: String,
  bar: Number
})
const emit = defineEmits(['update'])
console.log('defineProps', props)

// 双向绑定v-model
emit('update:bar', 'car')

// 暴露属性出去
defineExpose({_toRaw})

// h函数创建节点
const vNode = h('div', {
    class: 'test'
}, h('p', {class: '666'}, '++++'))
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
h3 {
    margin: 40px 0 0;
}
ul {
    list-style-type: none;
    padding: 0;
}
li {
    display: inline-block;
    margin: 0 10px;
}
a {
    color: #42b983;
}
</style>

运行结果

在这里插入图片描述
ps:以上代码是对vue3知识点的简单案例应用

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

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

相关文章

linux opencv4.2静态库编译及链接

1. 编译静态库 拉取opencv源码&#xff1a; https://github.com/opencv/opencv.git进入源码根目录&#xff0c;在platforms/linux目录下创建编译脚本build_linux.sh cd platforms/linux vi build_linux.sh脚本里配置cmake编译参数&#xff0c;这里编译静态库需要将 -DBUILD_S…

华为OD机试真题 JavaScript 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

一、题目描述 如果三个正整数A、B、C ,ABC则为勾股数 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c; 则称 其为勾股数元组。 请求出给定n~m范围内所有的勾股数元组。 二、输入描述 起始范围 1 < n < 10000 n &…

[数据结构初阶]单链表

顾名思义&#xff0c;单链表就是一个相邻节点用一个单向指针串起来&#xff0c;形成一种链式结构&#xff0c;那怎么将这些节点连结起来方便管理呢&#xff1f; 目录 单链表定义 申请空间 创建节点 打印链表 尾插 尾删 头插 头删 查找 插入 删除 pos后删除 pos位置删除…

Python 接口测试之接口关键字封装

引言 我们使用RF做UI自动化测试的时候&#xff0c;使用的是关键字驱动。同样&#xff0c;Python做接口自动化测试的时候&#xff0c;也可以使用关键字驱动。但是这里并不是叫关键字驱动&#xff0c;而是叫数据驱动。而接口测试的关键字是什么呢&#xff1f; 我们数据驱动的载体…

知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询。知识图谱在生物基因学中的应用非常广泛,可以帮助研究人员更好地理解和发现基因与疾病之间的关联关系,并推进相关领域的发展。 目录 引言知识图谱简介生物…

Linux之命令别名---alias

Linux之命令别名 定义 别名是命令的快捷方式。为那些需要经常执行&#xff0c;但需要很长时间输入的长命令创建快捷方式很有用 语法格式 alias 别名’原命令 -选项/参数’ 基本用法 查看设置的别名 [redhat8alocalhost ~]$ alias 删除别名 [redhat8alocalhost ~]$ unalia…

你见过的这里都有,开源Web性能测试工具集合

1、JMeter。这个也不用多介绍&#xff0c;基本属于做过Web性能测试都会接触的工具。Apache旗下的开源项目&#xff0c;属于一个Java桌面应用程序。优势是开源免费&#xff0c;扩展能力强。自身性能是硬伤。 2、Locust。Web性能测试的蝗药师&#xff0c;开源免费&#xff0c;并发…

C语言解决任意一个整数分解,逆序输出

C语言解决任意一个整数分解,逆序输出 输入&#xff1a;1234 输出&#xff1a;1 2 3 4 思路&#xff1a; 对于任意一个整数num, &#xff08;1&#xff09;num%10就可以得到其个位数的数字&#xff0c;例如&#xff1a;1234%104 &#xff08;2&#xff09;num/10就可以获取到这个…

【SQL】sqladvisor

文章目录 概述架构流程产品特点安装部署使用帮助输出命令行传参调用配置文件传参调用测试一:对小表进行测试测试二&#xff1a;对大表有索引测试测试三&#xff1a;对大表无索引进行测试测试四&#xff1a;多条SQL同时分析&#xff1a; 来源 概述 SQLAdvisor是由美团点评公司技…

AntDB 企业增强特性介绍——分布式集群下强一致备份恢复技术

AntDB 使用 barman 实现数据的备份和恢复&#xff0c;但是集群节点部署在多台主机上&#xff0c;每个节点单独备份和恢复。多台服务器时钟不同步的情况下同时备份后&#xff0c; 无法真正实现基于时间点的数据完全和不完全恢复。AntDB 提供基于时间点的全局一致性备份恢复。 A…

【趣味JavaScript】我的天! 居然工作了5年的前端开发都不知道eval函数其中居然暗藏玄机!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

【redis-初级】

文章目录 1.非关系型数据库&#xff08;NoSQL&#xff09;2.在Linux上安装redis2.1 安装前准备2.2 安装2.3 启动2.4 关闭 3. redis客户端3.1 命令客户端3.2redis远程客户端3.3 redis编程客户端 1.非关系型数据库&#xff08;NoSQL&#xff09; 2.在Linux上安装redis 2.1 安装前…

抑郁症评估干预系统开发 还你美好人生

随着时代的发展&#xff0c;生活压力越来越大&#xff0c;抑郁症似乎也成为了很常见的心理健康问题&#xff0c;让很多家庭苦不堪言&#xff0c;轻者痛苦折磨&#xff0c;重者甚至会出现自虐自杀&#xff0c;所以人们也越来越重视心理健康问题&#xff0c;想要摆脱抑郁症的束缚…

HP DA1023电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板HP DA1023 处理器Intel(R) Core(TM) i5-8265U已驱动 内存8 GB 2400 MHz DDR4.已驱动 硬盘Samsung SSD 980 250GB(macOS)已驱动 显卡I…

从零开始 Spring Boot 37:初始化 ApplicationContext

从零开始 Spring Boot 37&#xff1a;初始化 ApplicationContext 图源&#xff1a;简书 (jianshu.com) 从前文可以知道&#xff0c;作为 Ioc 容器的 ApplicationContext&#xff0c;需要进行一系列步骤来初始化以最终就绪&#xff08;对于 Web 应用来说就是可以提供Http服务&a…

[PyTorch][chapter 39][nn.Module]

前言&#xff1a; pytorch.nn是专门为神经网络设计的模块化接口. nn构建于autograd之上,可以用来定义和运行神经网络.是所有类的父类. 目录&#xff1a; 基本结构 常用模块 container(容器&#xff09; CPU,GPU 部署 train-test 环境切换 flatten MyLinear 一…

【kali】设置系统方式为中文

目录 1、右击终端 2、输入命令回车 3、需要输入当前账户密码 4、选择语言 5、再次确定 6、输入命令重启 1、右击终端 2、输入命令回车 sudo dpkg-reconfigure locales 3、需要输入当前账户密码 4、选择语言 依次选中en_US.UTF-8 / zh_CN.GBK&#xff08;没找到&#xf…

野火启明RenesasRA4M2 UDS诊断bootloader 升级MCU

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

微信一天可以加多少个好友?

微信作为最大的私域流量池&#xff0c;几乎所有的人都会往微信引流&#xff0c;而微信每天加好友数量是有严格限制的。微信每天加多少人不会封号&#xff1f;微信每天加多少好友才不会被限制&#xff1f;微信频繁加好友被限制怎么办&#xff1f;请跟随小编的脚步一起往下看吧。…

IP地址定位原理

IP地址定位是一种通过IP地址来确定位置的技术&#xff0c;在互联网和移动网络的应用十分广泛。本文将介绍IP地址定位的原理和实现方式。 IP地址定位原理 IP地址是Internet Protocol&#xff08;简称IP&#xff09;的缩写&#xff0c;是互联网上的一个地址标识符用于识别连接到…