vue3学习笔记一:createApp, ref, reactive, onMounted,computed
compositions-api的优势可以将每个功能相关的代码放在一个部分,避免代码混乱。后面的示例代码中可以看到,将人物部分的逻辑和标题相关的逻辑可以提取到单独的方法中,如果是正式的项目中,这两块的逻辑比较复杂,可以将它们提取到两个单独的js文件中,类似与vue2中的mixins但是不会出现mixins中各个部分的属性互相影响的问题createApp用于创建一个新的Vue应用实例createAp
·
compositions-api的优势
可以将每个功能相关的代码放在一个部分,避免代码混乱。后面的示例代码中可以看到,将人物部分的逻辑和标题相关的逻辑可以提取到单独的方法中,如果是正式的项目中,这两块的逻辑比较复杂,可以将它们提取到两个单独的js文件中,类似与vue2中的mixins但是不会出现mixins中各个部分的属性互相影响的问题
createApp
用于创建一个新的Vue应用实例
createApp({
setup(){
//......
}
}).mount('#app')
setup
它是Composition API的入口点。创建组件实例,然后初始化props,紧接着就会调用setup函数。它在beforeCreate钩子之前被调用。
ref
用于给基本类型的数据添加响应式
setup(){
let title = ref('标题')
return {title}
}
reactive
用于给对象添加响应式
setup(){
let persion = reactive({name:'小明'})
return {persion}
}
ref和reactive的区别
- ref也可以传入对象,也可以实现响应式,其内部会自动调用reactive方法
- reactive传入基本类型控制台会出警告,并且不会实现响应式
- 给ref的响应式对象赋值的时候要用.value的形式赋值
computed
这个计算属性方法,接收一个getter函数,返回一个默认不可手动修改的ref对象
setup(){
let title = ref('标题')
let subtitle = computed(()=> '二级' + title.value )
return {title, subtitle}
}
代码部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h2>{{title}}</h2> - <span>{{subTitle}}</span>
<button @click="changeTitle">改变标题</button>
<p>姓名:{{form.name}}</p>
<p>年龄:{{form.age}}</p>
<button @click="changeAge">改变年龄</button>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
// 引入
const { createApp, ref, reactive, onMounted, computed} = Vue;
// 初始化
createApp({
setup(){
let {title, changeTitle} = titleFn();
let {form, changeAge} = persionFn();
// 计算属性
let subTitle = computed(()=> title.value + 1000)
return {title, changeTitle, form, changeAge, subTitle};
}
}).mount('#app')
// 人物相关:引用类型的定义和修改
function persionFn(){
let form = reactive({name:'小明',age:66});
function changeAge(){
form.age = 100;
}
return {form, changeAge}
}
// 标题相关:定义和修改基本类型
function titleFn(){
let title = ref('标题一');
function changeTitle(){
// 注意这里到value里赋值
title.value = '标题66666666二';
}
return {title, changeTitle};
}
</script>
</body>
</html>
更多推荐
已为社区贡献23条内容
所有评论(0)