【vue3练习 -13】vue3使用toraw(),markRaw()

作用:将响应式数据变回原来的普通数据,提高效率、性能

使用场景:如果我们用reactive定义一个对象,他不管是多少层级的对象都是响应式的,假如我们将一个第三方的数据对象放入一个自己定义的对象里面,那么reactive会全部遍历每一层直到最深层次的数据全都变成响应式,如果我们使用toraw或者markRaw就可以防止放进去的那个对象不会变成响应式数据

api释义:toraw变成原始数据,markRaw标记为原始数据,raw(原始的)

截止发文前toraw()对ref定义的数据无效,不会把他变回原始数据

使用:

<template>
  <div>
    <h1>{{ title }}</h1>
    <span
      >我叫{{ name }},今年{{ age }}岁,我有一部{{ brand }}手机,它是我从{{
        source
      }}购买的</span
    >
    <br />
    <p>全部数据{{ person }}</p>
    <p>原始数据{{ rawPerson }}</p>
    <p>原始数据ref{{ rawRef }}</p>
    <button @click="name = '拜登'">换名字</button>
    <button @click="brand = '小米'">换手机</button>
    <button @click="fun">方法</button>
  </div>
</template>

<script>
import { ref, reactive, toRefs, toRaw, markRaw } from "vue";
export default {
  name: "",
  setup() {
    let title = ref("为了自由");
    let person = reactive({
      name: "川建国",
      age: "74",
      phone: {
        brand: "华为",
        price: 5555,
        color: "黑色",
        channel: {
          source: "拼多多",
          country: "china",
        },
      },
    });
    let rawPerson = toRaw(person); //传入一个reactive响应式数据
    let rawRef = toRaw(title); //传入一个ref响应式数据
    console.log("原始数据", rawPerson); //打印最开始定义的数据普通对象
    console.log("原始数据ref", rawRef); //打印结果还是响应式的数据
    let obj = {name:'希拉里',age:79}
    person.obj = obj//往响应式的对象里面添加一个对象同样是响应式的
    person.obj = markRaw(obj)//往响应式的对象里面添加一个markRaw标记的对象,这个放入的对象将不再是响应式的
    function fun() {
      console.log("fun方法");
      person.obj.age++
    }
    return {
      title,
      ...toRefs(person),
      ...toRefs(person.phone),
      ...toRefs(person.phone.channel), 多层对象用法
      person,
      rawPerson,
      rawRef,
      fun,
    };
  },
};
</script>

<style lang="" scoped>
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值