关于返回值是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, };
10
收起
正在回答 回答被采纳积分+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积分~
来为老师/同学的回答评分吧
0 星