> 웹 프론트엔드 > View.js > Vue에서 $emit, $nextTick 및 $vnode의 차이점

Vue에서 $emit, $nextTick 및 $vnode의 차이점

王林
풀어 주다: 2023-06-11 12:34:32
원래의
1337명이 탐색했습니다.

Vue는 일상적인 개발에 자주 사용되는 세 가지 개념은 $emit, $nextTick 및 $vnode입니다. 다소 유사해 보이지만 각각 다른 기능과 사용 시나리오를 가지고 있으며, 차이점을 하나씩 알아 보겠습니다.

1. $emit

$emit은 상위 구성 요소와 하위 구성 요소 간의 통신에 사용되는 Vue의 인스턴스 메서드입니다. 구성 요소가 상위 구성 요소에 정보를 전달해야 하는 경우 $emit 메서드를 통해 사용자 정의 이벤트를 트리거하고 일부 데이터 정보를 전달할 수 있습니다. 상위 구성 요소는 해당 사용자 정의 이벤트를 수신하고 그에 따라 처리할 수 있습니다.

예:

하위 구성 요소에서 $emit 메소드를 사용합니다.

<button @click="$emit('add')">添加商品</button>
로그인 후 복사

상위 구성 요소에서 사용자 정의 이벤트를 수신하여 해당 메소드를 실행합니다.

<template>
  <div>
    <my-component @add="addProduct"></my-component>
  </div>
</template>
<script>
export default {
  methods: {
    addProduct() {
      // TODO: 执行添加商品逻辑
    }
  }
}
</script>
로그인 후 복사

2. $nextTick

$nextTick은 인스턴스입니다. Vue의 메서드는 DOM 작업 및 비동기 데이터 업데이트의 타이밍 문제를 해결하는 데 사용됩니다. Vue에서는 템플릿 렌더링이 비동기적으로 수행됩니다. 데이터가 업데이트되면 Vue는 DOM 요소를 즉시 업데이트하지 않습니다. 대신 DOM 업데이트가 다음 틱으로 연기됩니다. 이 프로세스를 "비동기 업데이트 큐"라고 합니다.

DOM 업데이트가 완료된 후 콜백 함수가 실행되도록 데이터 업데이트 후 $nextTick 메서드를 호출하세요. 이 메커니즘은 DOM 업데이트 후 DOM 요소를 직접 작동하여 발생하는 일련의 문제를 방지할 수 있으며 구성 요소의 렌더링 타이밍을 더 잘 제어할 수도 있습니다.

예:

<button @click="updateMsg">点击更新消息</button>
로그인 후 복사

updateMsg 메서드에서 $nextTick 메서드를 사용하여 DOM 업데이트가 완료된 후 콜백 함수가 실행되도록 할 수 있습니다.

<script>
export default {
  data() {
    return {
      msg: 'Hello World!'
    }
  },
  methods: {
    updateMsg() {
      this.msg = 'Vue is awesome!'
      this.$nextTick(() => {
        console.log(this.$el.textContent) // 'Vue is awesome!'
      })
    }
  }
}
</script>
로그인 후 복사

3 $vnode

$vnode는 특수 속성입니다. Vue에서는 콜백 함수가 현재 처리 중임을 나타냅니다. 렌더링된 노드에 해당하는 가상 노드입니다. 이는 읽기 전용 속성이며 각 Vue 구성 요소 인스턴스에 해당하는 $vnode가 있습니다.

Vue의 수명 주기에서 $vnode 속성은 구성 요소가 다시 렌더링될 때마다 업데이트되며 현재 구성 요소 인스턴스의 상태를 나타낼 수 있습니다. 또한, $vnode 속성을 이용하면 컴포넌트의 부모-자식 관계, 컴포넌트 이름 등의 정보를 쉽게 얻을 수도 있다.

예:

<template>
  <div>
    <h1>{{ $vnode.componentOptions.Ctor.extendOptions.name }}</h1>
    <span>{{ $vnode.parent?.tag }}</span>
  </div>
</template>
<script>
export default {
  name: 'MyComponent'
}
</script>
로그인 후 복사

위 코드에서 $vnode.comComponentOptions.Ctor.extendOptions.name은 현재 구성 요소의 이름을 가져올 수 있고 $vnode.parent?.tag는 해당 구성 요소의 상위 태그 이름을 가져올 수 있습니다. 현재 구성 요소.

결론적으로 $emit, $nextTick 및 $vnode는 매우 유사하지만 각각 기능과 사용 시나리오가 다릅니다. $emit는 컴포넌트 간 통신에 사용되고, $nextTick은 DOM 업데이트 타이밍을 제어하는 ​​데 사용되고, $vnode는 컴포넌트 정보 및 상태를 얻는 데 사용됩니다. Vue 개발에서 이러한 기능을 최대한 활용하면 구성 요소의 유지 관리성과 성능을 효과적으로 향상시킬 수 있습니다.

위 내용은 Vue에서 $emit, $nextTick 및 $vnode의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿