App.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <h2>ref 和 reactive的细节问题</h2>
  3. <h3>m1: {{ m1 }}</h3>
  4. <h3>m2: {{ m2 }}</h3>
  5. <h3>m3: {{ m3 }}</h3>
  6. <button @click="update">更新</button>
  7. </template>
  8. <script lang="ts">
  9. import { defineComponent,ref,reactive } from 'vue'
  10. export default defineComponent({
  11. //ref用于处理基本数据类型 reactive 用来处理对象
  12. //如果用ref 对象/数组 内部会自动将对象 数组 转化为reactive代理的对象
  13. //ref的数据操作: 在ts中要.value,在模板中不需要
  14. //ref: 内部 通过给value属性添加getter/setter来实现对数据的劫持
  15. //reactive: 通过proxy来实现对于对象内部所有数据的劫持,并且通过reflect操作对象内部数据
  16. setup () {
  17. const m1 = ref('abc')
  18. const m2 = reactive({
  19. name: 'xiaoming',
  20. friend: {
  21. name: 'xiaohong'
  22. }
  23. })
  24. const m3 = ref({
  25. name: 'xiaolan',
  26. friend: {
  27. name: 'xiaobai'
  28. }
  29. })
  30. const update= ()=>{
  31. m1.value += '!'
  32. m2.friend.name +='='
  33. m3.value.friend.name += '!'
  34. }
  35. return {
  36. m1,
  37. m2,
  38. m3,
  39. update
  40. }
  41. }
  42. })
  43. </script>
  44. <style scoped>
  45. </style>