Vue3——04通过ref操作Dom元素,hooks的使用方法

简介: 通过ref操作Dom元素,hooks的使用方法

ref获取DOM元素

<div ref="divBox">Hello</div>
import {ref,onMounted} from 'vue'
setup() {
    const divBox = ref(null);
     onMounted(()=>{
        console.log(divBox.value);
     })
    return{divBox}
  }

2739a4ed7b54494c808fa8ded2e38d6c.png

父组件监听子组件中的元素

在父组件中的子组件里会打印一个proxy(实例),通过实例去获取里面的属性或者值

setup() {
      const commer = ref(null)
      onMounted(()=>{
          console.log(commer);
          console.log(commer.value);
      })
      return {
          commer
      }
  }

4bad16fb227d46c19bf47f4d7f0fba4d.png


看这个例子:

父组件:

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <com ref="commer"></com>
    <h3>通过ref用父组件接收子组件中的宽和高:<span>{{numWidht}} {{numHeight}}</span></h3>
  </div>
</template>
<script>
import com from '../components/com.vue'
import {ref,onMounted} from 'vue'
export default {
  components: {
    com
  },
  setup() {
      const commer = ref(null)
      const numWidht = ref(0);
      const numHeight = ref(0)
      onMounted(()=>{
          numWidht.value =commer.value.width
          numHeight.value =commer.value.height
      })
      return {
          commer,numWidht,numHeight
      }
  }
}
</script>

子组件:

<template>
<h1>屏幕尺寸:</h1>
<h1>宽度:{{width}}</h1>
<h1>高度:{{height}}</h1>
</template>
<script>
// import { ref,onMounted } from 'vue';
import useWindwoResize from '../hooks/useWindowResize'
export default {
    setup(){
        const {width, height} = useWindwoResize()
        return{width,height}
    }
};
</script>
<style lang="scss" scoped>
</style>

hooks页面:

import {onMounted, onUnmounted, ref} from 'vue';
function useWindowResize(){
    const width = ref(0)
    const height = ref(0)
    function onResize(){
        width.value = window.innerWidth
        height.value = window.innerHeight
    }
    onMounted(()=>{
        window.addEventListener("resize",onResize);
        onResize();
    })
    onUnmounted(()=>{
        window.removeEventListener('resize',onResize);
    })
    return{
        width,
        height
    }
}
export default useWindowResize;

hooks

在vue3中的hooks其实就是函数的写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中。这样其实和我们在vue2中学的混入(mixin)比较像。

父组件

<h1>屏幕尺寸:</h1>
  <div>宽度:{{ width }}</div>
  <div>高度:{{ height }}</div>

引入hooks中的js文件

import useWindwoResize from '../hooks/useWindowResize';
setup(){
    const {width, height} = useWindwoResize()
     return{width,height}
}

新建hooks文件夹在里面新建useWindowResize.js文件,内容如下:

import {onMounted, onUnmounted, ref} from 'vue';
function useWindowResize(){
    const width = ref(0)
    const height = ref(0)
    function onResize(){
        width.value = window.innerWidth
        height.value = window.innerHeight
    }
    onMounted(()=>{
        window.addEventListener("resize",onResize);
        onResize();
    })
    onUnmounted(()=>{
        window.removeEventListener('resize',onResize);
    })
    return{
        width,
        height
    }
}
export default useWindowResize;

cc6e7836f9024ae0a5b2f8201cfb1e96.png

相关文章
|
11月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
714 17
|
资源调度 JavaScript
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
375 57
|
JavaScript 开发者
在 Vue 3 中,除了 `markRaw` 和 `reactive` 结合,还有其他方式手动更新虚拟 DOM 吗?
在 Vue 3 中,除了 `markRaw` 和 `reactive` 结合,还有其他方式手动更新虚拟 DOM 吗?
290 57
|
JavaScript
Vue3基础(十wu)___ref获取原生dom元素
本文介绍了Vue3中使用`ref`来获取和操作原生DOM元素的方法,通过示例展示了如何通过`.value`改变元素的样式。
386 1
Vue3基础(十wu)___ref获取原生dom元素
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
2397 0
|
监控 JavaScript 前端开发
Vue3组合式函数(监听DOM尺寸 useResizeObserver)
本文介绍如何使用 `ResizeObserver` API 编写 Vue3 的通用组合式函数 `useResizeObserver`,该函数可方便地观察一个或多个元素的尺寸变化,并执行指定回调。`ResizeObserver` 接口用于监控 `Element` 或 `SVGElement` 的尺寸变化,避免了无限回调循环问题。
1319 0
Vue3组合式函数(监听DOM尺寸 useResizeObserver)
|
API
vue3中父子组件的双向绑定defineModel详细使用方法
vue3中父子组件的双向绑定defineModel详细使用方法
1927 0
|
人工智能 JavaScript 程序员
vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
2022 0
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树