我定义了一个 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 ) 我没太明白 请大佬解释下
1
allzc OP 我对象也试了下 跨 js 确实会失败 当前组建直接用不受影响
|
2
NerbraskaGuy 2023-09-26 20:54:08 +08:00
你说的跨组件使用那种是全局变量,app.config.globalProperties 绑定然后各实例再调用
|
3
allzc OP @NerbraskaGuy 我换种输值就可以直接传输用的 用 push(...) 另一个 js 能接收到的
|
4
iOCZ 2023-09-26 21:03:52 +08:00
怎么传到另一个 js 文件?
|
5
leoleoasd 2023-09-26 23:00:00 +08:00
我猜你把 ref.value 传入了其他文件的函数?
应该把整个 ref 传到其他函数里,而不是 ref 的 value ? ref 的 value 可以理解为一个指针,Push 操作是 in place 的,但是直接赋值就让指针指向了其他对象;如果把 ref.value 传入到别的函数后 ref 变动,自然无法接受到变动,因为『别的函数』持有的是指向旧内容的指针 |
6
allzc OP @iOCZ 通过 pinia ,A 通过 store 中的方法 F 传值给 store ,B 监听 store 中的方法 F ,F 触发,B 从 store 中拿出传入的值做处理
|
8
sjhhjx0122 2023-09-27 09:20:11 +08:00
我猜你是把 value 值传过去了?直接传用 ref 定义的变量应该就可以了
|
9
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
|
10
FakerLeung 2023-09-27 13:57:37 +08:00
不要把 .value 传递过去,直接把整个 ref 传过去即可。此贴完结撒花。
|