ref 获取 dom 和 document 方法 获取 dom 有什么区别

1,416 阅读1分钟

ref 获取 dom 和 document 方法 获取 dom 有什么区别

ref(reference 引用)

  • ref 用来在父元素上 给元素或子组件注册引用信息。引用信息注册在父组件的$refs 对象上。
    • 如果 ref 用在普通元素上,引用指向的是 dom 元素;
    • 如果 ref 用在子组件上,引用指向组件实例。
  • document 方法无论用在普通元素还是子组件上都只能获取到单纯的 dom 元素,不能获取实例实例

使用 ref 获取 dom 效率比 document 方法效率更高

获取dom ref 和 document如何选择:

  • 操作组件内部的普通元素或子组件时使用 ref
  • 操作本组件外部的 dom 元素必须要 document 方法,在文档全局查找 dom 元素

vue3 中获取组件实例的方法:

方式一:给组件添加 ref 属性,通过ref获取

<childCom ref="childComRef" id="childComID" />
<script>
  import childCom from './childCom.vue' // 在vue3中组件只要引入就能使用,不需要手动注册
  import { ref, reactive, toRefs, getCurrentInstance, onMounted } from 'vue'
  let childComRef = ref()
  onMounted(() => {
    console.log('childComRef', childComRef)
    console.log('childComRef.value', childComRef.value)
  })
</script>

方式二:获取父组件实例,通过组件实例获取

<childCom ref="childComRef" id="childComID" />
<script>
  import childCom from './childCom.vue' // 在vue3中组件只要引入就能使用,不需要手动注册
  import { ref, reactive, toRefs, getCurrentInstance, onMounted } from 'vue'
  let curInstance = getCurrentInstance()
  onMounted(() => {
    console.log('curInstance', curInstance)
    console.log(
      'curInstance.ctx.$refs.childComRef',
      curInstance.ctx.$refs.childComRef,
    )
  })
</script>

vue3 中获取 dom 元素的方法:

<childCom ref="childComRef" id="childComID" />
<div ref="divRef" id="divID">div dom</div>
<script>
  import childCom from './childCom.vue' // 在vue3中组件只要引入就能使用,不需要手动注册
  import { ref, reactive, toRefs, getCurrentInstance, onMounted } from 'vue'
  onMounted(() => {
    // document获取普通元素 dom
    let divDom = document.querySelector('#divID')
    // document获取子组件 dom
    let childComDom = document.querySelector('#childComID')
    console.log('childComDom', childComDom)
    console.log('divDom', divDom)
  })
</script>