V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
allzc
V2EX  ›  Vue.js

vue3 ref 的值问题

  •  
  •   allzc · 2023-09-26 20:45:50 +08:00 · 1473 次点击
    这是一个创建于 428 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我定义了一个 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 ) 我没太明白 请大佬解释下

    10 条回复    2023-09-27 13:57:37 +08:00
    allzc
        1
    allzc  
    OP
       2023-09-26 20:50:08 +08:00
    我对象也试了下 跨 js 确实会失败 当前组建直接用不受影响
    NerbraskaGuy
        2
    NerbraskaGuy  
       2023-09-26 20:54:08 +08:00
    你说的跨组件使用那种是全局变量,app.config.globalProperties 绑定然后各实例再调用
    allzc
        3
    allzc  
    OP
       2023-09-26 20:59:39 +08:00 via iPhone
    @NerbraskaGuy 我换种输值就可以直接传输用的 用 push(...) 另一个 js 能接收到的
    iOCZ
        4
    iOCZ  
       2023-09-26 21:03:52 +08:00
    怎么传到另一个 js 文件?
    leoleoasd
        5
    leoleoasd  
       2023-09-26 23:00:00 +08:00
    我猜你把 ref.value 传入了其他文件的函数?
    应该把整个 ref 传到其他函数里,而不是 ref 的 value ?
    ref 的 value 可以理解为一个指针,Push 操作是 in place 的,但是直接赋值就让指针指向了其他对象;如果把 ref.value 传入到别的函数后 ref 变动,自然无法接受到变动,因为『别的函数』持有的是指向旧内容的指针
    allzc
        6
    allzc  
    OP
       2023-09-26 23:19:47 +08:00 via iPhone
    @iOCZ 通过 pinia ,A 通过 store 中的方法 F 传值给 store ,B 监听 store 中的方法 F ,F 触发,B 从 store 中拿出传入的值做处理
    allzc
        7
    allzc  
    OP
       2023-09-26 23:23:15 +08:00 via iPhone
    @leoleoasd 你说的应该是对的,我明天 try 一下,大佬牛逼!
    sjhhjx0122
        8
    sjhhjx0122  
       2023-09-27 09:20:11 +08:00
    我猜你是把 value 值传过去了?直接传用 ref 定义的变量应该就可以了
    sjhhjx0122
        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
    FakerLeung
        10
    FakerLeung  
       2023-09-27 13:57:37 +08:00
    不要把 .value 传递过去,直接把整个 ref 传过去即可。此贴完结撒花。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.