[踩坑记录] Vue3 customRef 传入对象没有进入set方法
问题描述
学习Vue3 Ref 相关 API 的时候,遇到了 customRef 这个 API,它可以让我们自定义 ref 的更新的过程
但是使用 customRef 有一个问题就是,如果你传入的是初始值,那么一切正常,如果你传入的是一个对象,那 set 函数将会不起作用
customRef 简单使用
function myRef<T>(value: T) {
return customRef((track, trigger) => {
return {
get() {
// do something
// 跟踪
// console.log('track');
track();
return value;
},
set(newValue) {
// also do something
console.log('update')
value = newValue;
trigger();
},
};
});
}
const azouxCustom = myRef('custom');
const azouxCustomObject = myRef({ name: 'obj' });
azouxCustom.value = '123'; // 一切正常
azouxCustomObject.value.name = 'yoyoyo'; // NOT WORK
原因分析
如果我们传入的是对象,那么实际上 Value 记录的是一个地址值,我们在 set 方法中进行的 value = newValue 本质上只是给一个对象赋了它原本的地址值,因此不会更新
但是为什么连set方法都没有进去呢?原因应该是customRef底层用的是shallowRef(有待考证),是一个浅层更新,深层次的数据更新不会触发视图更新,因此就不会进入set方法
解决方法
- triggerRef()
- 直接替换 value
triggerRef
使用 triggerRef 只需要在我们更新属性值之后强制刷新一下ref对象即可
azouxCustomObject.value.name = 'azzz';
triggerRef(azouxCustomObject); // 之后会进入 set 方法,并触发视图更新
直接替换 value
azouxCustomObject.value = { name: 'aaa' }; // 这样也可以触发视图更新
[踩坑记录] Vue3 customRef 传入对象没有进入set方法的更多相关文章
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录
Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...
- VUE使用微信JDK(附踩坑记录)
VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...
- [技术博客]iview组件样式踩坑记录
[技术博客]iview组件样式踩坑记录 iview官方文档. 在本次项目开发中,前端项目主要使用vue框架+iview组件构建,其中iview组件在使用过程中遇到了许多官方文档中没有明确说明或是很难注 ...
- unionId突然不能获取的踩坑记录
昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
- ABP框架踩坑记录
ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...
随机推荐
- 如何使用 Serverless Devs 部署静态网站到函数计算
简介:手把手教你:如何使用 Serverless Devs 部署静态网站到函数计算. 前言 公司经常有一些网站需要发布上线,对比了几款不同的产品后,决定使用阿里云的函数计算(FC)来托管构建出来的静 ...
- 阿里云容器服务差异化 SLO 混部技术实践
简介:阿里巴巴在"差异化 SLO 混合部署"上已经有了多年的实践经验,目前已达到业界领先水平.所谓"差异化 SLO",就是将不同类型的工作负载混合运行在同一节 ...
- 链路分析 K.O “五大经典问题”
简介:链路分析是基于已存储的全量链路明细数据,自由组合筛选条件与聚合维度进行实时分析,可以满足不同场景的自定义诊断需求. 作者:涯海 链路追踪的 "第三种玩法" 提起链路追踪,大 ...
- 阿里云徐立:面向容器和 Serverless Computing 的存储创新
简介:以上为大家分享了阿里云容器存储的技术创新,包括 DADI 镜像加速技术,为容器规模化启动奠定了很好的基础,ESSD 云盘提供极致性能,CNFS 容器网络文件系统提供极致的用户体验. 作者:徐立 ...
- [Blockchain] 以太坊主流测试网 ropsten 和 kovan 的区别 以及 如何选择
ropsten 采用 POW (Proof-of-Work)共识机制,挖矿难度系数非常低,容易被攻击,不够低碳环保. kovan 采用 POA (Proof-of-Authority)共识机制,不需要 ...
- Solution Set - 贪心和数据结构
感觉自己好菜啊,这个专题真的不太会. CF1439C Greedy Shopping Link&Submission. 容易发现,当此人连续买了一段物品之后,他的钱数至少减半.所以他最多只会买 ...
- ide构建SpringMVC框架
框架原理图如下: 1. 创建如图项目 2. 在lib中所需导入jar包 3. 配置变量 (1) (2)add library (3)选择web app libraries 4. 配置web.xml文件 ...
- 简说Python之函数
目录 Python的函数 函数的简单调用 函数传参 返回值 计算圆形面积 变量作用域 局部变量 全局变量 就像平时玩的积木,函数就是一个个成块的积木,可以组合你想要的任何形状. Python的函数 函 ...
- 显示器AVG、DVI、HDMI、DisplayPort、Type-C、雷电接口
在近十年的发展,显示设备的接口发生了巨大的改变.以前使用比较多的是蓝色VGA接口,接著出现了白色的DVI接口,当遇到不同接口时,还得买转接头进行转接.后来,又有了HDMI等接口,现在则出现DP和USB ...
- JavaScript算法---基础排序类
<html> <script> //正序排序,把大的放到最后,arr[j]>arr[j+1] let fz=(arr)=>{ for(let len=arr.len ...