1. <body>
    2. <script src='https://unpkg.com/vue@next'></script>
    3. <div id='myApp'>
    4. <button @click="count1++">{{count1}}</button>
    5. <button @click="count2.value++">{{count2.value}}</button>
    6. <button @click="obj1.age++">{{obj1.age}}</button>
    7. <button @click="obj2.age++">{{obj2.age}}</button>
    8. </div>
    9. <script>
    10. var vm = {
    11. setup() {
    12. // 1, vue3封装好的响应数据定义写法
    13. const count1 = Vue.ref(0)
    14. // 2, 模拟实现底层响应式数据定义
    15. const count2 = new Proxy({value: 0}, {
    16. get(target, prop){
    17. return target[prop]
    18. },
    19. set(target, prop, value){
    20. target[prop] = value
    21. console.log(value)
    22. // 在set中数据更新后,调用虚拟DOM更新视图
    23. document.querySelectorAll("button")[1].innerText = value
    24. }
    25. })
    26. console.log(count1, count2)
    27. // 3, vue3封装好的响应式对象
    28. const obj1 = Vue.reactive({age: 10})
    29. // 4, 模拟实现底层响应式对象定义
    30. const obj2 = new Proxy({age:20},{
    31. get(target, prop){
    32. return target[prop]
    33. },
    34. set(target, prop, value){
    35. target[prop] = value
    36. // 在set中数据更新后,调用虚拟DOM更新视图
    37. document.querySelectorAll("button")[3].innerText = value
    38. }
    39. })
    40. console.log(obj1, obj2)
    41. return{
    42. count1,
    43. count2,
    44. obj1,
    45. obj2
    46. }
    47. }
    48. }
    49. Vue.createApp(vm).mount('#myApp')
    50. </script>
    51. </body>