知海

教程:第 9 步

Vue教程

教程:第 9 步

生命周期和模板引用

目前为止,Vue 为我们处理了所有的 DOM 更新,这要归功于响应性和声明式渲染。然而,有时我们也会不可避免地需要手动操作 DOM。

这时我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用:

vue-html 复制代码
<p ref="pElementRef">hello</p>

组合式 API

要访问该引用,我们需要声明并暴露一个同名的 ref:

<script setup> 中:

js 复制代码
const pElementRef = ref(null)

setup() 函数中:

js 复制代码
setup() {
  const pElementRef = ref(null)

  return {
    pElementRef
  }
}

注意这个 ref 使用 null 值来初始化。这是因为当 <script setup>setup() 执行时,DOM 元素还不存在。模板引用 ref 只能在组件挂载后访问。

要在挂载之后执行代码,我们可以使用 onMounted() 函数:

<script setup> 中:

js 复制代码
import { onMounted } from 'vue'

onMounted(() => {
  // 此时组件已经挂载。
})

setup() 函数中:

js 复制代码
import { onMounted } from 'vue'

createApp({
  setup() {
    onMounted(() => {
      // 此时组件已经挂载。
    })
  }
})

选项式 API

此元素将作为 this.$refs.pElementRef 暴露在 this.$refs 上。然而,你只能在组件挂载之后访问它。

要在挂载之后执行代码,我们可以使用 mounted 选项:

在单文件组件中:

js 复制代码
export default {
  mounted() {
    // 此时组件已经挂载。
  }
}

在 HTML 页面中:

js 复制代码
createApp({
  mounted() {
    // 此时组件已经挂载。
  }
})

这被称为生命周期钩子——它允许我们注册一个在组件的特定生命周期调用的回调函数。还有一些其他的钩子,例如组合式 API 中的 onUpdatedonUnmounted,以及选项式 API 中的 createdupdated。更多细节请参阅生命周期图示

现在,尝试添加 mounted(选项式 API)或 onMounted(组合式 API)钩子,然后通过 this.$refs.pElementRef(选项式 API)或 pElementRef.value(组合式 API)访问 <p>,并直接对其执行一些 DOM 操作,例如修改它的 textContent

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。