vue3.js
总结: 此处涉及的vue3新特性
1, vue3中所有的变量定义,数据更新,函数执行,生命周期, 都建议写在setup中
(setup中的所有变量,函数等叫做组合式API, vue3中称之为 Hook )
2, vue3中定义值类型数据使用Vue.ref()函数, 会在外层包裹一层对象结构
3, vue3中定义引用类型建议使用Vue.reactive()函数, 不会包裹对象
4, setup中的所有变量,函数都需要在return中返回才能在模板中调用
5, vue3使用ref()和reactive()定义的数据,更新时,视图总会刷新,所以废除了vue2中的$set更新函数和$forceUpdate强制更新
6, Vue不再是构造函数,无法创建bus对象, 而且vue3废除了$on监听, 所以无法使用总线传值
<body><script src='./vue3.js'></script><div id='myApp'><button @click="count1++">{{count1}}</button><!-- 模板中调用和修改响应式数据,不需要调用value属性 --><button @click="count2++">{{count2}}</button><button @click="add2">{{count2}}</button><button @click="zhangsan.age++">{{zhangsan.age}}</button><button @click="add3">{{zhangsan.age}}</button><button @click="arr1[0]++">{{arr1}}</button><button @click="add4">{{arr1}}</button><button @click="lisi.age++">{{lisi.age}}</button><button @click="add5">{{lisi.age}}</button><button @click="arr2[0]++">{{arr2}}</button><button @click="add6">{{arr2}}</button></div><script>var vm = {data() {return {count1: 0}},setup() {// vue3中使用Vue.ref()函数定义响应式数据, 参数是默认值const count2 = Vue.ref(0)// 返回值是一个对象,对象的value属性,才是真正的响应值console.log(count2, count2.value)// 定义更新函数, 需要调用value进行修改function add2(){count2.value++}// 使用Vue.ref定义对象结构const zhangsan = Vue.ref({age: 10})console.log(zhangsan, zhangsan.value.age)function add3(){zhangsan.value.age++}// 使用Vue.ref()定义数组结构const arr1 = Vue.ref([1,2,3])console.log(arr1, arr1.value, arr1.value[1])function add4(){arr1.value[1]++}// 使用Vue.reactive()定义对象,const lisi = Vue.reactive({age: 20})// 返回值是一个代理对象, 可以直接调用对象中的字段console.log(lisi, lisi.age)function add5(){lisi.age ++}// 使用Vue.reactive()定义数组,const arr2 = Vue.reactive([1,2,3])console.log(arr2, arr2[1])function add6(){arr2[1]++}// setup中的所有变量,函数都需要在return中返回才能在模板中调用return{count2, add2, zhangsan, add3, arr1, add4, lisi, add5, arr2, add6}}}Vue.createApp(vm).mount('#myApp')</script></body>
