Skip to content

什么是组件

一个 .vue 文件就是一个组件

如何引入组件

直接 import 进来就当一个元素用就行了

App.vue

vue
<template>
  <A></A>
  <A></A>
  <A></A>
</template>

<script lang="ts" setup>
import { ref, watchEffect } from 'vue'
import A from './components/A.vue'
</script>
<style scoped></style>

A.vue

vue
<template>
    <div>我是组件</div>
</template>

<script lang="ts" setup>
</script>

组件的生命周期

如果我们使用 options API 往往会知道有 beforeCreated, created 等生命周期钩子,但是 setup 语法糖没有这两个生命周期,其他照旧

从创建到改变到销毁,创建也分为即将创建和创建成功后,更新分为即将更新和更新后,我们可以观察到dom元素的是否改变来区分。 App.vue

vue
<template>
  <A v-if="flag"></A>
  <button @click="destoryA">创建和销毁</button>
</template>

<script lang="ts" setup>
import { ref, watchEffect } from 'vue'
import A from './components/A.vue'

const flag = ref<Boolean>(true);
const destoryA = () => {
  flag.value = !flag.value;
}
</script>
<style scoped></style>

A.vue

vue
<template>
    <div>我是组件</div>
    <div ref="div">{{ str }}</div>
    <button @click="change">修改</button>
</template>

<script lang="ts" setup>
import { ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue'
const str = ref<string>('aaa');
const div = ref<HTMLDivElement>();
const change = () => {
    str.value = 'bbb';
    console.log('修改了str', str.value);
}
// 创建之前
onBeforeMount(() => {
    console.log('onBeforeMount: 组件即将挂载', div.value)
})
// 创建完成
onMounted(() => {
    console.log('onMounted: 组件已挂载', div.value)
})
// 更新之前
onBeforeUpdate(() => {
    console.log('onBeforeUpdate: 组件即将更新', div.value?.innerText)
})
// 更新完成
onUpdated(() => {
    console.log('onUpdated: 组件已更新', div.value?.innerText)
})
// 销毁之前
onBeforeUnmount(() => {
    console.log('onBeforeUnmount: 组件即将销毁')
})
// 销毁完成
onUnmounted(() => {
    console.log('onUnmounted: 组件已销毁')
})
</script>