vue3学习记录(1)

简介: 随着vue3的普及我们团队开始全面接纳了vue3。

ref 函数

ref函数用来定义一个基础类型的响应式的数据(主要针对基础类型数据)
示例:声明一个name的响应式变量

import { ref } from 'vue'
let name = ref('')

ref声明的变量在方法中使用时需要使用.value去取值

console.log(name.value)

在模板中使用时不需要.value

<span>{{name}}<span>

如果ref声明的是基础数据类型使用 Object.defineProperty 通过 get 和 set 实现的响应式数据
如果ref声明的是是对象则使用 proxy 代理对象实现的响应式数据(内部会自动通过reactive转为代理对象)

reactive 函数

reactive 函数用来定义一个对象类型的响应式数据
示例:声明一个info的响应式对象类型的变量

import { reactive } from 'vue'
let info = reactive({
  name:'XXX',
  age:18
})

reactive声明的变量在方法中使用时不需要使用.value去取值可以直接使用

console.log(info.name)

在模板中使用时不需要.value

<span>{{info.name}}<span>

reactive 函数接收一个对象或数组,返回一个代理对象(proxy 对象),可以实现数组、深层对象的响应式数据,这是 vue2.0 中无法实现的,底层基于 Proxy。

toRef函数

toRef函数基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同步:改变源属性的值将更新 ref 的值,反之亦然。

const state = reactive({
  foo: 1,
  bar: 2
})
const fooRef = toRef(state, 'foo')
// 更改该 ref 会更新源属性
fooRef.value++
console.log(state.foo) // 2
// 更改源属性也会更新该 ref
state.foo++
console.log(fooRef.value) // 3

toRef() 这个函数在你想把一个 prop 的 ref 传递给一个组合式函数时会很有用:

<script setup>
import { toRef } from 'vue'
const props = defineProps(/* ... */)
// 将 `props.foo` 转换为 ref,然后传入
// 一个组合式函数
useSomeFeature(toRef(props, 'foo'))
</script>

当 toRef 与组件 props 结合使用时,关于禁止对 props 做出更改的限制依然有效。尝试将新的值传递给 ref 等效于尝试直接更改 props,这是不允许的。在这种场景下,你可能可以考虑使用带有 get 和 set 的 computed 替代。即使源属性当前不存在,toRef() 也会返回一个可用的 ref。这让它在处理可选 props 的时候格外实用,相比之下 toRefs 就不会为可选 props 创建对应的 refs。

toRefs函数

toRefs函数将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。每个单独的 ref 都是使用 toRef() 创建的。
示例:

const state = reactive({
  foo: 1,
  bar: 2
})
const stateAsRefs = toRefs(state)
/*
stateAsRefs 的类型:{
  foo: Ref<number>,
  bar: Ref<number>
}
*/
// 这个 ref 和源属性已经“链接上了”
state.foo++
console.log(stateAsRefs.foo.value) // 2
stateAsRefs.foo.value++
console.log(state.foo) // 3

当从组合式函数中返回响应式对象时,toRefs 相当有用。使用它,消费者组件可以解构/展开返回的对象而不会失去响应性:

function useFeatureX() {
  const state = reactive({
    foo: 1,
    bar: 2
  })
  // ...基于状态的操作逻辑
  // 在返回时都转为 ref
  return toRefs(state)
}
// 可以解构而不会失去响应性
const { foo, bar } = useFeatureX()

toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref,请改用 toRef。
vue3官网

相关文章
|
小程序
【微信小程序】全局配置 - tabBar
全局配置 - tabBar 1. 什么是 tabBar 2. tabBar 的 6 个组成部分 3. tabBar 节点的配置项 4. 每个 tab 项的配置选项 全局配置 - 案例:配置 tabBar 1. 需求描述 2. 实现步骤 3. 步骤1 - 拷贝图标资源 4.步骤2 - 新建 3 个对应的 tab 页面 5. 步骤3 - 配置 tabBar 选项 6. 完整的配置代码
【微信小程序】全局配置 - tabBar
|
搜索推荐 Docker 容器
Docker-03-HelloWorld
Docker-03-HelloWorld
436 0
|
数据库管理
sqlite实用技巧:查询表数据时,使用列对齐,显示表头
sqlite实用技巧:查询表数据时,使用列对齐,显示表头
sqlite实用技巧:查询表数据时,使用列对齐,显示表头
|
存储 机器学习/深度学习 安全
ConcurrentHashMap核心原理,彻底给整明白了 马小莫QAQ
ConcurrentHashMap,它在技术面试中出现的频率相当之高,所以我们必须对它深入理解和掌握。 谈到 ConcurrentHashMap,就一定会想到 HashMap。HashMap 在我们的代码中使用频率更高,不需要考虑线程安全的地方,我们一般都会使用 HashMap。HashMap 的实现非常经典,如果你读过 HashMap 的源代码,那么对 ConcurrentHashMap 源代码的理解会相对轻松,因为两者采用的数据结构是类似的 这篇文章主要讲解ConcurrentHashMap的核心原理,并注释详细源码。
ConcurrentHashMap核心原理,彻底给整明白了  马小莫QAQ
|
数据可视化 容器
echarts第二次渲染不出来的原因
echarts第二次渲染不出来的原因
echarts第二次渲染不出来的原因
|
监控 网络协议 Linux
【Linux】之【网络】相关的命令及解析[ethtool、nload、nethogs、iftop、iptraf、ifstat]
ethtool命令用于查询ethX网口基本设置、及设置网卡的参数。
987 0
【Linux】之【网络】相关的命令及解析[ethtool、nload、nethogs、iftop、iptraf、ifstat]
|
网络安全 开发工具 git
Git配置多个SSH-Key
Git配置多个SSH-Key
336 0
|
编解码 运维 Linux
linux centos 安装ffmpeg以及相关的解码库
项目里一直有使用FFMPEG,不过以前都是运维安装的,今天有事,我来搞搞,顺便学习记录下。
linux centos 安装ffmpeg以及相关的解码库
|
移动开发 JavaScript Oracle
Oracle根据汉字取拼音首字母的function
Oracle根据汉字取拼音首字母的function
9718 0