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>