[Vue3] Study Notes-toRaw and markRaw

  • toRaw:
    • Function: Convert a responsive objectreactive generated by a bot into a normal object .
    • Usage scenario: It is used to read the common object corresponding to the responsive object. All operations on this common object will not cause page updates.
  • markRaw:
    • Role: Mark an object so that it will never become a responsive object again.
    • Application scenario:
      1. Some values ​​should not be set responsive, such as complex third-party libraries, etc.
      2. Skipping reactive transformations can improve performance when rendering large lists with immutable data sources.
<template>
	<h4>当前求和为:{
    
    {
    
    sum}}</h4>
	<button @click="sum++">点我++</button>
	<hr>
	<h2>姓名:{
    
    {
    
    name}}</h2>
	<h2>年龄:{
    
    {
    
    age}}</h2>
	<h2>薪资:{
    
    {
    
    job.j1.salary}}K</h2>
	<h3 v-show="person.car">座驾信息:{
    
    {
    
    person.car}}</h3>
	<button @click="name+='~'">修改姓名</button>
	<button @click="age++">增长年龄</button>
	<button @click="job.j1.salary++">涨薪</button>
	<button @click="showRawPerson">输出最原始的person</button>
	<button @click="addCar">给人添加一台车</button>
	<button @click="person.car.name+='!'">换车名</button>
	<button @click="changePrice">换价格</button>
</template>

<script>
	import {
    
    ref,reactive,toRefs,toRaw,markRaw} from 'vue'
	export default {
    
    
		name: 'Demo',
		setup(){
    
    
			//数据
			let sum = ref(0)
			let person = reactive({
    
    
				name:'张三',
				age:18,
				job:{
    
    
					j1:{
    
    
						salary:20
					}
				}
			})

			function showRawPerson(){
    
    
				const p = toRaw(person)
				p.age++
				console.log(p)
			}

			function addCar(){
    
    
				let car = {
    
    name:'奔驰',price:40}
				person.car = markRaw(car)
				//person.car = car
			}

			function changePrice(){
    
    
				person.car.price++
				console.log(person.car.price)
			}

			//返回一个对象(常用)
			return {
    
    
				sum,
				person,
				...toRefs(person),
				showRawPerson,
				addCar,
				changePrice
			}
		}
	}
</script>


おすすめ

転載: blog.csdn.net/david_520042/article/details/131550260