Vue 2에 익숙하다면 모든 구성 요소의 템플릿에 단일 루트 요소가 필요하다는 것을 기억할 것입니다. Vue 3에서는 조각으로 인해 더 이상 필요하지 않습니다. 이는 이제 래퍼 없이도 구성 요소가 여러 루트 요소를 가질 수 있음을 의미합니다.
<!-- Vue 2 --> <template> <div> <!-- wrapper ? --> <h1>My Blog Post</h1> <ArticleComponent>{{ content }}</ArticleComponent> </div> </template> <!-- Vue 3 --> <template> <h1>My Blog Post</h1> <ArticleComponent>{{ content }}</ArticleComponent> </template>
React의 Fragment와 매우 유사합니다. 그러나 Vue는 뒤에서 조각을 처리합니다. 실제로 Vue 3에서는 조각으로 태그를 지정하세요.
Vue 2에서는 하위 구성 요소에 대한 참조를 쉽게 설정할 수 있으며 래퍼 요소와 구성 요소 인스턴스를 모두 참조합니다.
그런데 Vue 3에서 래퍼 요소가 없을 때 심판은 무엇을 참조하나요? ?
하위 구성 요소가 옵션 API를 사용하거나 을 사용하지 않는 경우 참조는 하위 구성 요소의 this를 가리키며 상위 구성 요소에 대한 전체 액세스 권한을 부여합니다. 그 속성과 방법.
<스크립트 설정>을 사용하면 어떻게 되나요?
<스크립트 설정>을 사용하는 구성요소는 기본적으로 비공개입니다. 속성을 노출하려면 DefineExpose 매크로를 사용해야 합니다.
<!-- Child --> <template> <div>
<!-- Child --> <template> <h1>My Blog Post</h1> <!-- Root 1 --> <ArticleComponent>{{ content }}</ArticleComponent> <!-- Root 2 --> </template> <!-- Parent --> <script setup lang="ts"> const childRef = ref() onMounted(()=>{ console.log(childRef.value.$el); // #text }) </script> <template> <Child ref="childRef" /> </template>
잠깐, 무슨 일이 일어난 거야?
Fragment(여러 노드)를 사용하면 Vue는 하위 구성 요소 루트 노드를 래핑하는 텍스트 노드를 생성합니다.
Vue 3에서 Fragments를 사용할 때 Vue는 구성 요소 시작 부분에 빈 텍스트 노드를 마커로 삽입하므로 $el이 #text 노드를 반환합니다.
#text는 Vue가 내부적으로 사용하는 참조점과 같습니다.
또한 구성 요소 인스턴스에 여전히 액세스할 수 있다는 점을 언급하고 싶습니다(하위 항목에서 <스크립트 설정>을 사용하지 않는 경우).
1) 단일 루트를 이렇게 사용하세요
2) 템플릿 참조를 사용하여 DefineExpose
<!-- Child --> <script setup lang="ts"> import { ref } from 'vue'; const h1Ref = ref() const articleRef = ref() defineExpose({ h1Ref, articleRef }) </script> <template> <h1 ref="h1Ref">My Blog Post</h1> <ArticleComponent ref="articleRef">{{ content }}</ArticleComponent> </template> <!-- Parent --> <script setup lang="ts"> const childRef = ref() onMounted(()=>{ console.log(childRef.value); // {h1Ref: RefImpl, articleRef: RefImpl} }) </script> <template> <Child ref="childRef" /> </template>
이제 참조와 defineExpose를 사용하여 노출한 모든 항목에 액세스할 수 있습니다.
위 내용은 프로덕션 스택 구축: Docker, Meilisearch, NGINX 및 NestJS의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!