<template>
  <h2>ref 和 reactive的细节问题</h2>
  <h3>m1: {{ m1 }}</h3>
  <h3>m2: {{ m2 }}</h3>
  <h3>m3: {{ m3 }}</h3>

  <button @click="update">更新</button>
</template>

<script lang="ts">
import { defineComponent,ref,reactive } from 'vue'

export default defineComponent({
  //ref用于处理基本数据类型 reactive 用来处理对象
  //如果用ref 对象/数组 内部会自动将对象 数组 转化为reactive代理的对象
  //ref的数据操作： 在ts中要.value，在模板中不需要
  //ref: 内部 通过给value属性添加getter/setter来实现对数据的劫持
  //reactive： 通过proxy来实现对于对象内部所有数据的劫持，并且通过reflect操作对象内部数据
  setup () {
    const m1 = ref('abc')
    const m2 = reactive({
      name: 'xiaoming',
      friend: {
        name: 'xiaohong'
      }
    })

    const m3 = ref({
      name: 'xiaolan',
      friend: {
        name: 'xiaobai'
      }
    })
    const update= ()=>{
      m1.value += '!'
      m2.friend.name +='='
      m3.value.friend.name += '!'
    }
    return {
      m1,
      m2,
      m3,
      update
    }
  }
})
</script>

<style scoped>

</style>