Vue3之hook初体验

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。Vue3之hook初体验,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是hook?

其本质是一个函数,通过Composition API(组合式api)可以把复杂或常用的逻辑封装成一个个hook来进行调用,简介优雅,方便维护。

通俗来讲:抽出一部分代码单独放一个js里,在setup里就可直接用hook中的函数,不是父子组件的关系,此外,hooks 复用率高,使setup中逻辑更清晰。

1、在 src 目录新增 hooks 文件夹,再新建 useRepairTableHeight.js 文件,如:/src/hooks/useRepairTableHeight.js

import { getCurrentInstance, onBeforeUnmount, onMounted, reactive } from 'vue'

/*
 * @Title: 更正表格高度的 hook 公共函数 
 * @Description: 抽离与业务无关的公共代码,仅适用于某某管理页面的 el-table 表格,针对缩小和放大浏览器屏幕时进行自适应高度
 * @Param: 目标对象的 ref 名称
 * @Author: 帅龍之龍
 * @Date: 2023-2-10 11:00:57
 * @LastEditors: 帅龍之龍
 * @LastEditTime: 2023-2-10 11:00:57
 */
export default function (targetRefName) {
  // 当前实例
  const currentInstance = getCurrentInstance()

  // 更正结果
  const repairRes = reactive({
    targetRefName: targetRefName,
    msg: ''
  })

  /**
   * 更正表格高度方法
   */
  async function repair() {
    const targetRef = await currentInstance.refs[targetRefName]
    console.log('repair =>', targetRef)
    if (targetRef != null) {
      repairTableHeight(targetRef) 
    } else {
      repairRes.msg = '目标节点不存在'
    }
  }

  /**
   * 更正表格高度具体实现方法
   */
  function repairTableHeight(targetRef) {
    const clientWidth = document.body.clientWidth
    const clientHeight = document.body.clientHeight
    console.log('repairTableHeight =>', clientWidth, clientHeight)
    if (clientWidth > 1184) {
      targetRef.style.height = 'calc(100% - 72px)'
    } else if((clientWidth <= 1184 && clientWidth > 800)) {
      targetRef.style.height = 'calc(100% - 122px)'
    } else {
      targetRef.style.height = 'calc(100% - 159px)'
    }

    repairRes.msg = '更正表格高度成功'
  }

  onMounted(() => {
    // 1、自动更正表格高度
    repair()

    // 2、动态更正表格高度
    window.addEventListener('resize', repair) // 新增 resize 监听事件
  })

  onBeforeUnmount(() => {
    window.removeEventListener('resize', repair) // 移除 resize 监听事件
  })

  return repairRes // 返回更正结果
}

2、在需要使用的页面引入该 hook 文件,然后在这个页面进行调用,位置在 createdsetup 生命周期函数里面。

<script>
import useRepairTableHeight from '@/hooks/useRepairTableHeight'

export default {
  data: () => ({

  }),
  created() {
    console.info(useRepairTableHeight('taskTableContainerRef'))
  },
}
</script>

<script setup lang="ts">
import useRepairTableHeight from '@/hooks/useRepairTableHeight'
console.info(useRepairTableHeight('taskTableContainerRef'))
</script>

3、效果如下~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/151155.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!