关于返回值是ComputedRedImpl对象的问题

关于返回值是ComputedRedImpl对象的问题

老师你好,我碰到了3个问题:

1:我通过computed函数拿到的值为什么是ComputedRedImpl对象啊?

2:computed方法返回的是一个ref对象,reactive返回的也是一个ref对象,那可以用reactive替换computed吗?

3:proxy对象如何转换成正常的对象啊?


setup() {
    const route = useRoute();
    const store = useStore();
    const currentId = route.params.id as string;

    const template = computed(() =>
      store.getters.getTemplateById(parseInt(currentId))
    );

    const template1 = store.getters.getTemplateById(parseInt(currentId));

    console.log(reactive(template)); // 一个proxy对象,我想拿到原始值,怎么办啊?
    console.log(template1); // 为什么是一个ComputedRefImpl对象?

    return {
      route,
    };


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
张轩 2022-07-23 09:22:19

同学你好

1 这就是 computed 返回的特殊类型,vue3 给他的定义就是这样的。

2 computed 返回的类型是ComputedRedImpl,并不是 ref 返回的类型,这个对象是不可修改的,它只会根据内部的值变化的时候进行自动的更新,reactive 可以重新赋值,所以不能互相变换。记住 computed 不能重新赋值,ref 和 reactive 可以重新赋值就好了。

3 proxy 转换为普通对象,可以使用 lodash 提供的 cloneDeep 方法,https://lodash.com/docs/4.17.15#cloneDeep 一般情况下,都不需要转换,因为 Proxy 对象神奇之处就是和原始对象非常的相似,假如是传给后端等工作,都和原始对象看起来是一模一样的。

  • 提问者 菜卷_ #1

    感谢张轩老师,还有个小问题~就是在vue3中如何打印出 ComputedRedImpl 或 proxy 对象中的值?




    我以前用vue2或jquery等其他js框架开发的时候,习惯将返回值用console.log()打印出来,这样可以清晰的看到对象中的值。


    但在vue3中,我目前想看到返回值中的值只能通过console.log(ComputedRedImpl.value.target)这个方法,看起来有些笨拙,或者是通过lodash的cloneDeep方法转换成原始值再打印?但这个方法感觉也有些不太优雅啊.....还有其它的方法吗?

    2022-07-23 15:41:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师