我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3-HOOKS模块化处理方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3-HOOKS模块化处理方式

vue3模块化处理

vue3版本的更新,就是能搞更好的重用机制,可以把想要得模块独立出去

eg:显示一个当前时间的工能,在多个页面需要调用的时候不用重复的调用

可以在class="lazy" data-src目录下,新建一个文件夹hooks(所有抽离出来的功能模块都可以放到这个文件夹里),

然后再新建一个文件useNowTime.js,这里使用use开头是一个使用习惯,代表是一个抽离出来的模块

import { ref } from "vue";
const nowTime = ref("00:00:00");
const getNowTime = () => {
    const now = new Date();
    const hour = now.getHours() < 10 ? "0" + now.getHours() : now.getHours();
    const minu =
        now.getMinutes() < 10 ? "0" + now.getMinutes() : now.getMinutes();
    const sec =
        now.getSeconds() < 10 ? "0" + now.getSeconds() : now.getSeconds();
    nowTime.value = hour + ":" + minu + ":" + sec;
    setTimeout(getNowTime, 1000);
};
export { nowTime, getNowTime }

注意:需要将定义的变量nowTime和方法getNowTime通过export导出

  • 使用的时候跟在setup中定义的变量和方法一样使用
  • 使用模块化封装一个远程调用接口的组件

建立useURLAxios.js文件

在文件中定义远程加载需要的 变量和axios请求

import {ref} from 'vue'
import axios from 'axios';
function usURLAxios(url) {
    const result = ref(null)
    const loading = ref(true)
    const loaded =ref(false)
    const error =ref(null)
    axios.get(url).then((res)=>{
        loading.value = false
        loaded.value = true
        result.value = res.data
    }).catch(e=>{
        error.value = e
        loading.value = false
    })
    return {
        result,
        loading,
        loaded,
        error
    }
}
export default usURLAxios

使用时

新增一个.vue文件

<template>
  <div>
    <button @click="getImg">随机展示图片</button>
    <div v-if="thisloading">Loading.....</div>
    <img v-if="thisloaded" :class="lazy" data-src="thisresult.message" />
    <div></div>
  </div>
</template>
<script>
import { reactive, toRefs } from "vue";
import useUrlAxios from "../hooks/useURLAxios";
export default {
  setup() {
    const data = reactive({
      thisresult: null,
      thisloading: true,
      thisloaded: false,
      getImg: () => {
        const { result, loading, loaded } = useUrlAxios(
          "https://dog.ceo/api/breeds/image/random"
        );
        data.thisresult = result;
        data.thisloading = loading;
        data.thisloaded = loaded;
        console.log(
          22222,
          data.thisresult,
          data.thisloading,
          data.thisloaded,
          result,
          loaded,
          loading
        );
      },
    });
    const refData = toRefs(data);
    return { ...refData };
  },
};
</script>
<style lang="scss" scoped>
</style>

vue hooks理解与使用

vue的hooks和mixins功能相似,但又比mixins具有以下几个优势:

  • 允许hooks间相互传递值
  • 组件之间重用状态逻辑
  • 明确指出逻辑来自哪里

demo源码示意

hook1:

import { useData, useMounted } from 'vue-hooks';
 
export function windowwidth() {
  const data = useData({
    width: 0
  })
 
  useMounted(() => {
    data.width = window.innerWidth
  })
 
  // this is something we can consume with the other hook
  return {
    data
  }
}
import { useData, useMounted } from 'vue-hooks';
 
export function windowwidth() {
  const data = useData({
    width: 0
  })
 
  useMounted(() => {
    data.width = window.innerWidth
  })
 
  // this is something we can consume with the other hook
  return {
    data
  }
}

hook2:

// the data comes from the other hook
export function logolettering(data) {
  useMounted(function () {
    // this is the width that we stored in data from the previous hook
    if (data.data.width > 1200) {
      // we can use refs if they are called in the useMounted hook
      const logoname = this.$refs.logoname;
      Splitting({ target: logoname, by: "chars" });
 
      TweenMax.staggerFromTo(".char", 5,
        {
          opacity: 0,
          transformOrigin: "50% 50% -30px",
          cycle: {
            color: ["red", "purple", "teal"],
            rotationY(i) {
              return i * 50
            }
          }
        },
        ...

在组件内部,我们可以将 hook1 作为参数传递给 hook2:

<script>
import { logolettering } from "./../hooks/logolettering.js";
import { windowwidth } from "./../hooks/windowwidth.js";
 
export default {
  hooks() {
    logolettering(windowwidth());
  }
};
</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue3-HOOKS模块化处理方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Node.js使用方式及模块化的方法

本篇内容介绍了“Node.js使用方式及模块化的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Node.js ?Node.js 是
2023-06-29

小程序中怎么进行模块化处理

这篇文章主要介绍了小程序中怎么进行模块化处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ES6和commonJS的选择首先在微信小程序中不论是 ES6 或者是 common
2023-06-22

Python文件处理方法、os模块和glob模块怎么使用

这篇“Python文件处理方法、os模块和glob模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python文件
2023-06-30

Python文件处理方法、os模块和glob模块如何使用

这篇文章主要讲解了“Python文件处理方法、os模块和glob模块如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python文件处理方法、os模块和glob模块如何使用”吧!一、文
2023-07-06

C++ 函数异常与设计模式:模式化异常处理

在 c++++ 中,异常处理设计模式是创建可重用且可靠代码的有效方法,其中包括异常处理模式。本文探讨了以下常用模式:异常安全:确保异常不会破坏函数内部状态。访问器保护:确保访问成员变量时不会抛出异常。智能指针:自动清除资源,即使在异常发生时
C++ 函数异常与设计模式:模式化异常处理
2024-05-03

Vue3中响应式的特殊处理方法是什么

本篇内容介绍了“Vue3中响应式的特殊处理方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue2 vs vue3两个响应式更新的核
2023-07-06

关于gradle多模块项目依赖管理方式

这篇文章主要介绍了关于gradle多模块项目依赖管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-15

Python中mmap模块处理大文本的操作方法

这篇文章主要介绍了Python中mmap模块(处理大文本),将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存映射读写取代I/O缓存读写,以获得较高的性能,需要的朋友可以参考下
2023-02-07

MySQL中日期格式化匹配的处理方式

目录1. 基本的日期格式化函数2. 使用 DATE_FORMAT 进行日期格式化3. 使用 STR_TO_DATE 进行字符串解析4. 日期范围匹配5. 使用日期函数进行更多操作6. 时间部分匹配7. 综合示例8. 总结在mysql中,处理
MySQL中日期格式化匹配的处理方式
2024-08-19

解析Node.js异常处理中domain模块的使用方法

NodeJS 提供了 domain 模块,可以简化异步代码的异常处理。在介绍该模块之前,我们需要首先理解“域”的概念。简单的讲,一个域就是一个 JS 运行环境,在一个运行环境中,如果一个异常没有被捕获,将作为一个全局异常被抛出。NodeJS
2022-06-04

编程热搜

目录