vue3 ref 的值问题

2023-09-26 20:45:50 +08:00
 allzc

我定义了一个 const tempArr = ref([]); 然后 tempArr.value = newArrayList; console.log(tempArr.value); 当前组建能打印出 tempArr.value 的具体值 也就是 newArrayList 的值

但是我传递到另一个 js 文件中,接收后 发现接收的值是空的 即 Proxy(Array) {} chatGPT 说是 这样直接赋值会损失响应性 正确赋值方式 tempArr.value.push(...newArrayList);
试了下 确实可以

但之前 const object = ref({}); object.value = newObject; 我好像也没出错(可能只在当前同一个组件中,没有跨 js ) 我没太明白 请大佬解释下

1489 次点击
所在节点    Vue.js
10 条回复
allzc
2023-09-26 20:50:08 +08:00
我对象也试了下 跨 js 确实会失败 当前组建直接用不受影响
NerbraskaGuy
2023-09-26 20:54:08 +08:00
你说的跨组件使用那种是全局变量,app.config.globalProperties 绑定然后各实例再调用
allzc
2023-09-26 20:59:39 +08:00
@NerbraskaGuy 我换种输值就可以直接传输用的 用 push(...) 另一个 js 能接收到的
iOCZ
2023-09-26 21:03:52 +08:00
怎么传到另一个 js 文件?
leoleoasd
2023-09-26 23:00:00 +08:00
我猜你把 ref.value 传入了其他文件的函数?
应该把整个 ref 传到其他函数里,而不是 ref 的 value ?
ref 的 value 可以理解为一个指针,Push 操作是 in place 的,但是直接赋值就让指针指向了其他对象;如果把 ref.value 传入到别的函数后 ref 变动,自然无法接受到变动,因为『别的函数』持有的是指向旧内容的指针
allzc
2023-09-26 23:19:47 +08:00
@iOCZ 通过 pinia ,A 通过 store 中的方法 F 传值给 store ,B 监听 store 中的方法 F ,F 触发,B 从 store 中拿出传入的值做处理
allzc
2023-09-26 23:23:15 +08:00
@leoleoasd 你说的应该是对的,我明天 try 一下,大佬牛逼!
sjhhjx0122
2023-09-27 09:20:11 +08:00
我猜你是把 value 值传过去了?直接传用 ref 定义的变量应该就可以了
sjhhjx0122
2023-09-27 09:22:15 +08:00
@allzc 你这个 pinia 的存取流程也太麻烦了,如果你不需要回溯之类的复杂功能可以直接拿 ref 实现一个全局 store,vue 官网有例子 https://cn.vuejs.org/guide/scaling-up/state-management.html#simple-state-management-with-reactivity-api
FakerLeung
2023-09-27 13:57:37 +08:00
不要把 .value 传递过去,直接把整个 ref 传过去即可。此贴完结撒花。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/977374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX