toRaw要怎么用??不想影响数据值
<template>
<div>
<button @click="test">pick mebutton>
<div>{{ oldData }}div>
<div>{{ newData }}div>
div>
template>
<script setup>
import { ref, toRaw } from 'vue'
const oldData = reactive({
a: 1,
b: {
c: 2,
d: {
e: 3,
},
},
})
const newData = ref({})
function test() {
newData.value = changeData(toRaw(oldData))
}
function changeData(data) {
data.a = 101
data.b.c = 102
data.b.d.e = 103
return data
}
script>
oldData: { "a": 101, "b": { "c": 102, "d": { "e": 103 } } }
newData:{ "a": 101, "b": { "c": 102, "d": { "e": 103 } } }
oldData: { "a": 1, "b": { "c": 2, "d": { "e": 3 } } }
newData:{ "a": 101, "b": { "c": 102, "d": { "e": 103 } } }
toRaw是返回代理的原始对象,返回的对象还是那个对象,其引用地址是一样的,你要做的是深拷贝一份
function test() {
let data = JSON.parse(JSON.stringify(toRaw(oldData)))
newData.value = changeData(data)
}