V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  shakukansp  ›  全部回复第 11 页 / 共 25 页
回复总数  491
1 ... 7  8  9  10  11  12  13  14  15  16 ... 25  
2023-01-03 01:18:17 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 哦,你 35 楼说我暴露水平什么意思,讲的有问题吗,我看你是后面反应过来才改口

你家猫学两天能明白你还要这么多楼才能反应过来,讲话恶心人谁不会啊
2023-01-03 01:02:26 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
22 楼结论必没有错

我也没倔强什么,因为这就是预期内行为,就算不懂 vue 响应式原理也能通过 js 基础特性得出会丢失响应式的结论
2023-01-03 00:51:19 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 当然急啊,怕你误导楼主,为什么主楼这代码会有这种问题我还是得告诉楼主啊,你再看看我 21 楼回了什么

“原段代码就算把 someprops 改成 reactive ,依然无法通过修改 getOne.value 的值来触发视图更新,就算 getOne.value 里面的值是个对象也一样,具体会表现为修改 getOne.value 中对象的子属性可以触发更新,但是给 getOne.value 赋值一个不同引用的对象就会没法更新视图。”

此处原代码指主楼代码

重点在这里 “就算 getOne.value 里面的值是个对象也一样,具体会表现为修改 getOne.value 中对象的子属性可以触发更新,但是给 getOne.value 赋值一个不同引用的对象就会没法更新视图”

我就说死了,这就是引用链断了,引用问题引用问题引用问题,vue 虽然收集了依赖,但是 someprops 中的 one 已经和 getOne.value 引用的是不同的对象了
2023-01-03 00:37:22 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
我 21 楼也写的很清楚了,什么情况下 vue 会有什么表现我特么都写出来了

怎么就没想解决楼主问题了,嗯?
2023-01-03 00:35:45 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 我就是在和楼主讲这个问题,你再看看主楼代码,我回楼主的时候他还没回后面的代码呢。

仅仅传入一个数字,也是我说的值传递,这也是 vue 为什么要用 ref 包装一下基础类型的原因
和 setup 要返回一个函数和 options api 里面 data 要返回一个函数是一样的原因

你只说解决方法而不说下为什么像主楼这么写,改 getOne.value 没法触发视图更新吗
2023-01-03 00:29:16 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@shakukansp 接 45 楼,这才是为什么 setup 要返回一个函数才能让里面的 count.value 能被触发 getter

watchEffect 也是传了函数才能收集到依赖
2023-01-03 00:25:07 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 嘿,回你 43 楼,那你讲讲,const a = ref(1), 为什么 watch 要传 () => a.value 或者 a, 而不能传 a.value?
2023-01-03 00:20:42 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 你这又是把 setup 当渲染函数,又把东西放函数里了,要像 react 一样 setup 运行多次才能通过 getter 读取到新值。

我就问你,假如 setup 返回一个对象而不是渲染函数 那你这 { count: count.value, inc: () => count.value++ } 还能行吗
2023-01-03 00:05:41 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 为什么在函数里就能触发 getter 了?本质是什么,我真服了
2023-01-02 23:53:47 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
let a = 1
const fn = () => { console.log(a) }
fn()
a = 2
fn()

为啥两次打印的结果不一样啊
楼主你不要听楼上那个 pr 过 vue/reactive 的
2023-01-02 23:47:26 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller emmm 只能说得亏是 setup 里面 return 是个函数你才能得瑟,那你倒是讲讲 vue 为什么要你 return 一个函数啊
2023-01-02 23:39:33 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
写函数外面然后在函数里面{...props}
是不是也调用 props 的 getter 了?那为什么写函数外面运行 inc 触发不了视图更新?不就是引用没了吗
2023-01-02 23:33:57 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 回你 30 楼 我都说了,你写在函数里面当然没问题,是引用传递,你写函数外面还能这样?你再想想?还要我多看看源码,自己多提升一下 js 基础吧
2023-01-02 23:32:12 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 我的意思是解决这个问题并不需要懂 vue 的响应式原理,丢失响应式就是个引用链断裂的问题

你把变量声明写在函数里,也是建立了对 js 对象值的引用,这和 vue 并没有什么关系

要让它按楼主想的一样运行实际操作就是像官方文档一样照本宣科用 reactive 包一下 ref ,这样 vue 自然有内部操作去数据代理

const a = reacvtive({ c:1 })
const b = ref(3)
a.c = b.value
a.c = b
console.log(a)得到的结果都是 a 是 { c:3 } 用脚想都知道直接传包装对象 ref 的时候 vue 会有特殊的操作
不需要懂什么响应式原理,要的就是一句官方文档的说明

OP 写过 golang 就能对 js 这个基本特性有更深的理解
2023-01-02 23:13:53 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
你这个代码能生效是因为在函数里面的 count.value 是引用传递,而不是值传递啊

传 () => string 能和直接传 string 一样吗
2023-01-02 23:11:15 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 你发的这个例子和楼主的原代码根本就是两码事了

本质就是引用问题
2023-01-02 23:10:11 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 你在说啥,大哥,你这是在 return 的函数里面声明的对象,本身这个函数就是对值的引用了,
你在 return 函数外面声明试试?
2023-01-02 22:03:55 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
OP 不用很迷惑

网上的文章说的 vue3 中失去响应式的陷阱

无一例外都不是陷阱,是符合 JS 基础特性的预期内行为

只要你理解好引用传递,面对这个现象就不会感觉奇怪
2023-01-02 21:57:05 +08:00
回复了 daiwenzh5 创建的主题 Vue.js vue3 里面使用 jsx 解构属性,响应式丢失了,怎么处理
@johnkiller 主要问题还是引用链断裂而不是没有在 render 里面触发 getter

原段代码就算把 someprops 改成 reactive ,依然无法通过修改 getOne.value 的值来触发视图更新,就算 getOne.value 里面的值是个对象也一样,具体会表现为修改 getOne.value 中对象的子属性可以触发更新,但是给 getOne.value 赋值一个不同引用的对象就会没法更新视图。

reactive(someprops)
someprops.one = getOne.value 和 someprops.one = getOne ,是两码事,后者 vue 会在解包 ref 时额外进行数据代理的链接
2023-01-01 02:31:26 +08:00
回复了 shakukansp 创建的主题 Apple 网易邮箱大师 mac 版支持 m1 了
也不用比来比去,劝我不要用,因为我确实没用这个客户端,我用的 edison mail 和 mimestream
网易邮箱大师用过一段时间觉得还行,出了 m1 版本的支会一下而已(
1 ... 7  8  9  10  11  12  13  14  15  16 ... 25  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   886 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 21:04 · PVG 05:04 · LAX 13:04 · JFK 16:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.