Vue3中toRefs的使用
1 使用reactive 实现数据的响应式
<template>
<div>
<h2>toRef的使用</h2>
<p> 姓名:{{state.name }} </p>
<p>年龄:{{ state.age }} </p>
<button @click="changeHander">改变内容</button>
</div>
</template>
<script>
import { reactive } from "vue"
export default {
name: "App",
setup() {
let state=reactive({
name:'李四',
age:40
})
function changeHander(){
state.name="李四222"
state.age=80
}
return {state,changeHander}
}
};
</script>
虽然上面可以使用数据的响应式。
但是有时属性值很多,
可能有达到几十个值。
这样在视图上一个个属性点(.) 会很麻烦
可不可以不通过点也能够正常的去渲染和自动更新视图呢?
这个时候,机智的小伙伴们可能就想到到解构
那么我们来尝试一下。
2.使用解构
<template>
<div>
<h2>toRef的使用</h2>
<p> 姓名:{{name }} </p>
<p>年龄:{{ age }} </p>
<button @click="changeHander">改变内容</button>
</div>
</template>
<script>
import { reactive } from "vue"
export default {
name: "App",
setup() {
let state=reactive({
name:'李四',
age:40
})
function changeHander(){
state.name="李四222"
state.age=80
}
// ...state虽然我们通过解构的方式。不要在视图上进行点了。但是数据却没有响应
return {...state,changeHander}
}
};
</script>
我们发现使用解构视图并没有改变。
说明使用解构不行。
这个时候我们今天的主角toRefs就登场了
toRefs 可以把一个响应式对象转换为普通的对象。
该普通对象的每一个值都是ref。
由于变成了ref,所以我们需要使用value。
赶紧往下看看
3. 初次使用toRefs
<template>
<div>
<h2>toRef的使用</h2>
<p> 姓名:{{name }} </p>
<p>年龄:{{ age }} </p>
<button @click="changeHander">改变内容</button>
</div>
</template>
<script>
import { reactive, toRefs } from "vue"
export default {
name: "App",
setup() {
let state=reactive({
name:'李四',
age:40
})
// toRefs 可以把一个响应式对象转换为普通的对象。
// 该普通对象的每一个值都是ref
// age: ObjectRefImpl {_object: Proxy, _key: "age", __v_isRef: true}
// name: ObjectRefImpl {_object: Proxy, _key: "name", __v_isRef: true}
let state2=toRefs(state);
console.log( 'state2==>ref',state2 )
function changeHander(){
// 由于变成了ref,所以我们需要使用value
state2.name.value="李四222"
state2.age.value=80
}
// ...state虽然我们通过解构的方式。不要在视图上进行点了。但是数据却没有响应
return {...state2,changeHander}
}
};
</script>

4.优化一下,在toRefs的时候进行解构
<template>
<div>
<h2>toRef的使用</h2>
<p> 姓名:{{name }} </p>
<p>年龄:{{ age }} </p>
<button @click="changeHander">改变内容</button>
</div>
</template>
<script>
import { reactive, toRefs } from "vue"
export default {
name: "App",
setup() {
let state=reactive({
name:'李四',
age:40
})
// 这里进行了一次解构
let {name,age }=toRefs(state);
function changeHander(){
name.value="李四222"
age.value=80
}
return {name,age,changeHander}
}
};
</script>
5. toRefs 可以和 hook 进行搭配使用
<template>
<div>
<h2>toRef的使用</h2>
<p> 姓名:{{name }} </p>
<p>年龄:{{ age }} </p>
<button @click="changeHander">改变内容</button>
<h1>==========奥特曼信息==========</h1>
<p> 姓名:{{name1 }} </p>
<p>年龄:{{ age1 }} </p>
</div>
</template>
<script>
import { reactive, toRefs } from "vue"
export default {
name: "App",
setup() {
let state=reactive({
name:'李四',
age:40
})
// 这里进行了一次解构
let {name,age }=toRefs(state);
// 这样在视图上就直接使用值了
let {name1, age1}=useInfo();
function changeHander(){
name.value="李四222"
age.value=80
}
return {name,age,changeHander, name1, age1}
}
};
// 假设我定义的一个hook
function useInfo(){
let sate=reactive({
name1:"奥特曼",
age1:1000
})
//这里变成响应式并且解构
return { ...toRefs(sate) }
}
</script>
Vue3中toRefs的使用的更多相关文章
- vue3中使用axios如何去请求数据
在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...
- vue3中watch函数
watch 监听普通类型 let count = ref(1); const changeCount = () => { count.value+=1 }; watch(count, (newV ...
- 端午总结Vue3中computed和watch的使用
1使用计算属性 computed 实现按钮是否禁用 我们在有些业务场景的时候,需要将按钮禁用. 这个时候,我们需要使用(disabled)属性来实现. disabled的值是true表示禁用.fals ...
- vue 3 学习笔记 (七)——vue3 中 computed 新用法
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...
- 在vue3中使用router-link-active遇到的坑
在使用 router-link-active 设置链接激活时CSS类名时,发现在例如 /member/order 和 /member/order/:id 这两个都包含 /member/order的路由 ...
- Vue3中的响应式对象Reactive源码分析
Vue3中的响应式对象Reactive源码分析 ReactiveEffect.js 中的 trackEffects函数 及 ReactiveEffect类 在Ref随笔中已经介绍,在本文中不做赘述 本 ...
- Vue3中插槽(slot)用法汇总
Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是你是否了解它全部用法呢?本篇文章就为大家带来Vue3中插槽的全部用法来帮助大家查漏补缺. 什么是插槽 简单来说就是子组件中的提供给父组件使用 ...
- vue3中defineComponent 的作用
vue3中,新增了 defineComponent ,它并没有实现任何的逻辑,只是把接收的 Object 直接返回,它的存在是完全让传入的整个对象获得对应的类型,它的存在就是完全为了服务 TypeSc ...
- Module Federation 模块联邦 在Vue3中使用Vue2搭建的微服务
前言: 备注:本文基于对webpack Module Federation有一定了解的情况下 一般情况下使用模块联邦都是会使用相同的版本,如Vue2的组件时在Vue2中使用,但我为什么会在Vue3项目 ...
随机推荐
- (邹博ML)矩阵和线性代数
主要内容 矩阵 特征值和特征向量 矩阵求导 矩阵 SVD的提法 奇异值分解(Singular Value Decomposition)是一种重要的矩阵分解方法,可以看做对称方阵在任意矩阵上的推广. 假 ...
- [LeetCode每日一题]81. 搜索旋转排序数组 II
[LeetCode每日一题]81. 搜索旋转排序数组 II 问题 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 & ...
- PowerDesigner16安装和使用
安装 安装参考链接:PowerDesigner安装教程 因为这个博主已经操作的很详细了,这边就不做过多的赘述. 使用 新建模型 选择物理模型 调出面板Palette 建表 最终的效果(一般不在数据库层 ...
- @RequestParam、@PathVariable、 @RequestBody用法
Get和Post请求 get方式的请求是没有请求体的.但是get有query string parameter .比如url?name=zhangsan post请求发现了两种请求体.一种是FromD ...
- 注解配置定时器Scheduling
注解配置定时器配置 package com.demo; import org.springframework.context.annotation.Configuration; import org. ...
- word打印华文字体出现乱码
乱码原因:打印机自带字体库支持的问题 解决方法:解决方法是修改打印机的设置,不使用打印机的字体,直接使用电脑的字体. 具体操作:控制面板-设备和打印机-选中要设置的打印机-打印首选项-图像品质-设置字 ...
- DOM 绑定事件
// 1.获取事件源 var oDiv = document.getElementById('box'); console.log(oDiv); //2.事件 (1)直接绑定匿名函数 oDiv.onc ...
- mysql基本命令(增,查,改,删)
from oldboy egon
- goland:调试
弹出框f9 会跳转到下一个断点
- 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端
nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...