vue3에서는 ref를 통해 하위 구성 요소 인스턴스를 가져오며 값은 정의되지 않습니다.

이것이 Vue3가 ref를 통해 하위 컴포넌트 인스턴스(하위 컴포넌트의 DOM 구조, 데이터, 메소드)를 얻는 방법입니다.오늘은 index.vue(상위 컴포넌트) 작성 시 ref를 바인딩하여 하위 컴포넌트의 데이터와 메소드를 얻고 싶습니다. 하위 구성 요소. , 인쇄된 하위 구성 요소의 데이터는 정의되지 않았습니다. Baidu 검색의 일반적인 방법은 다음과 같습니다.

참조 연결: Vue3---ref를 통해 하위 구성 요소 인스턴스(하위 구성 요소의 DOM 구조, 데이터 및 메서드) 얻기, vue3에서 ref의 놀라운 사용, vue에서 하위 구성 요소 메서드 가져오기 및 호출, vue_vue3에서 하위 구성 요소 데이터를 사용하여 구성 요소 ref_imkaifan 가져오기 blog-CSDN 블로그 코드는 다음과 같습니다.

하위 어셈블리

<template>
  <div class="hello">
    <h1>{
   
   { msg }}</h1>
    <input type="file" id="fileInput" name="file" multiple="multiple" @change="selectFile"/>
  </div>
</template>
 
<script>
import { defineComponent, ref } from 'vue'
export default defineComponent({
  name: 'HelloWorld',
  setup() {
    const msg = ref('HelloWorld') // 响应式数据:msg
    const fileList = ref([]) // 响应式数据:上传的文件列表
    function selectFile () { // 有文件上传时
      var file = document.getElementById('fileInput').files[0] // File(Blob) 对象   File extends Blob
      fileList.value.push(file)
    }
    return { // return中的数据会被父组件拿到
      msg,
      fileList,
      selectFile
    }
  }
})
</script>
 

상위 구성요소

<template>
  <div class="home">
    <HelloWorld ref="sonRef" />
    <button @click="getSonComponent">GetSonComponent</button>
  </div>
</template>
 
<script>
import { defineComponent, ref } from 'vue'
import HelloWorld from '@/components/HelloWorld.vue'
 
export default defineComponent({
  name: 'Home',
  components: {
    HelloWorld
  },
  setup(){
    const sonRef = ref(null) // 通过 ref 绑定子组件
    function getSonComponent () { // 通过 ref 获取子组件\
      // 获取子组件的数据
      console.log(sonRef.value)
      console.log(sonRef.value.msg)
      sonRef.value.fileList.forEach(item => {
        console.log(item)
      })
    }
    return {
      sonRef,
      getSonComponent
    }
  }
})
</script>

그리고 ref를 통해 구성 요소 인스턴스의 데이터를 가져와 정의되지 않은 것으로 인쇄하는 코드는 다음과 같습니다.

상위 구성요소

<template>
    <div>
    <welcome></welcome>
    </div>
</template>

<script setup lang="ts">
  import welcome from './welcome.vue'
  import { ref,onMounted } from 'vue'

const welcomeRef = ref(null);
console.log("welcomeRef ",welcomeRef.value.isScroll)  //welcomeRef undefined
<script>

하위 어셈블리

<template>
    <div v-if="isScroll">
    测试内容1
    </div>
    <div v-else>
    测试内容2
    </div>
</template>

<script setup lang="ts">
  import { ref,onMounted } from 'vue'

  const isScroll= ref(false);
<script>

정보를 검토한 결과 다음과 같은 사실을 발견했습니다.

<script setup> + TS 사례 기준 

세 단계로

1. 하위 구성 요소의 상위 구성 요소에서 호출해야 하는 속성을 노출합니다.

2. 하위 구성 요소에서 유형을 정의합니다.

3. 상위 구성 요소는 하위 구성 요소의 유형을 소개하고 ref를 정의합니다.

1단계: DefineExpose는 하위 구성 요소 속성을 노출합니다.
DefineExpose({ select })

2단계: 하위 구성 요소에서 구성 요소 인스턴스 유형 정의
첫 번째 단계가 완료되면 상위 구성 요소가 하위 구성 요소 인스턴스의 속성을 호출하면 TS는 오류를 보고하고 속성을 찾을 수 없습니다. 작업), 따라서 대답은 다음과 같습니다. 하위 구성 요소 인스턴스의 유형을 선언하려면 유형을 정의해야 합니다.

3단계: 하위 구성 요소의 노출된 데이터 유형을 정의하고 ref를 정의하여
하위 구성 요소의 ref를 선언하고 하위 구성 요소 인스턴스를 가져옵니다(노출된 속성만 사용할 수 있음).

추천

출처blog.csdn.net/weixin_51747462/article/details/132778083