vue3学习随便记3
Posted sjg20010414
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3学习随便记3相关的知识,希望对你有一定的参考价值。
应用实例与组件实例
创建一个应用实例
创建应用实例是通过全局API函数 createApp 实现的,应用有它自己的应用API函数,并且应用API函数的返回值多数是应用自己,所以,可以链式调用
<html>
<head>
<script src="vue.global.js"></script>
</head>
<body>
<div id="app">
<search-input :text="searchText"></search-input>
</div>
<script>
const createApp = Vue // 导入 全局API (非模块方式)
const SearchInputComponent =
props: [ 'text' ],
template: `搜索:<input type="text" v-model="text" />`
const App =
data()
return
searchText: '输入搜索文本'
createApp(App) // 调用 全局API
.component('SearchInput', SearchInputComponent) // 调用 应用API
// .SomeOtherAppApi(...)
.mount('#app') // 调用 应用API
</script>
</body>
</html>
根组件
传递给 createApp 的选项用于配置根组件。也就是我们把应用挂载到某个DOM元素上,这个元素就是根组件,它是渲染的起点(不在这个DOM范围内的HTML不归Vue管)。
需要注意,应用app的 mount 方法不返回应用app本身,mount 返回根组件实例 vm,所以,我们前面的代码,必须把mount写在最后。换句话说,根组件实例 vmRoot = 应用实例 app.mount(DOM元素)
组件实例property
property 有时候翻译成“属性”,但这个名词很容易和 attribute属性 混淆,这里的 property,就是其本义“财产”,组件实例的 property,就是组件实例可以直接用的东西。我们把之前的示例代码略修改如下:
<html>
<head>
<script src="vue.global.js"></script>
</head>
<body>
<div id="conditional-rendering">
<div>
<span v-if="seen">这个渲染了</span> <br>
<span v-show="show">这个显示了</span>
</div>
<div>
<button @click="toggleSeen">切换渲染的</button>
<button @click="toggleShow">切换显示</button>
</div>
</div>
<script>
const ConditionalRendering =
data()
return
seen: true,
show: true
,
methods:
toggleSeen()
this.seen = !this.seen
,
toggleShow()
this.show = !this.show
const app = Vue.createApp(ConditionalRendering)
const vm = app.mount('#conditional-rendering')
console.log(vm.seen)
console.log(vm.toggleSeen)
</script>
</body>
</html>
在控制台可以看到输出
通过数据代理 ,我们通过 data、methods、props、computed、inject、setup等组件选项,把用户定义的 property 添加到组件实例。例子中,无论放入 data 的 seen、show,还是放入 methods 的 toggleSeen()、toggleShow(),都将自动成为 vm 的 property,所以,可以 vm.seen、vm.toggleSeen() 这样使用。
组件实例的所有 property,无论如何定义 (放入 data、methods、computed……),都可以在组件的模板中访问,如例子中直接使用 seen、show、toggleSeen、toggleShow,不过模板中,它们应该是通过指令绑定上去的(v-if、v-show、v-bind、v-on等)
在组件的配置中,组件实例用 this 来引用 (有时候,我们会倾向于在组件生命周期钩子 created 或者 mounted 中,将 this 保存到全局变量 _self,是为了应对某些场合,相应作用域范围引用不到 this,转而引用 _self)。
组件实例除了用户定义的 property,还有一些内置的 property (相当于系统变量或系统方法),为了区分,内置 property 带 $ 前缀,如 $attrs 、$emit
不要在选项 property 或回调上使用箭头函数,例如 created: () => console.log(this.a) 或者 vm.$watch('a', newValue => this.myMethod()) 是错误的用法,因为箭头函数没有自己的this或super绑定,不应该作为方法使用(Arrow function expressions - JavaScript | MDN), 这两种错误用法,使得 this 会到 vm 的上一级词法作用域去查找,往往导致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 错误。
生命周期与生命周期钩子
(图片引用自 应用 & 组件实例 | Vue.js)
生命周期钩子相当于和组件生命周期有关的回调函数,或者说内置回调函数,比较常用的生命周期钩子是 created() 和 mounted()
以上是关于vue3学习随便记3的主要内容,如果未能解决你的问题,请参考以下文章