iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3的自定义hook函数使用
  • 131
分享到

vue3的自定义hook函数使用

2024-04-02 19:04:59 131人浏览 八月长安
摘要

目录自定义hook函数使用vue3 hooks函数示例官方示例代码---封装前使用hooks函数封装后hooks函数自定义hook函数使用 使用Vue3的组合api封装的可复用的功能

自定义hook函数使用

  • 使用Vue3的组合api封装的可复用的功能函数
  • 自定义hook的作用类似于vue2中的mixin技术
  • 自定义Hook的优势: 很清楚复用功能代码的来源, 更清楚易懂
  • 需求1: 收集用户鼠标点击的页面坐标

这里先看一下大体项目结构:

这里的hooks下的文件是示例代码,public内的是测试数据

在启动项目后,测试public的data文件内的数据,

App.vue

<template>
  <div>
    <h2>自己定义hook函数操作</h2>
    <h2>x:{{x}}, y:{{y}}</h2>
    <h3 v-if="loading">正在加载中11...</h3>
    <h3 v-else-if="errORMsg">{{errorMsg}}</h3>
    <ul v-else>
      <li>id:{{data.id}}</li>
      <li>address:{{data.address}}</li>
      <li>distance:{{data.distance}}</li>
    </ul>
 
    <!-- 数组数据 -->
    <ul v-for="item in data" :key="item.id">
      <li>id:{{item.id}}</li>
      <li>title:{{item.title}}</li>
      <li>price: {{item.price}}</li>
    </ul>
  </div>
</template>
 
<script>
import { defineComponent, watch } from 'vue'
import useMousePosition from './hooks/useMousePosition'
import useRequest from './hooks/useRequest'
 
export default defineComponent({
  name: 'App',
  // 需求1:用户在页面中点击页面,把点击位置的横纵坐标收集并展示起来
 
  setup(){
    const {x,y} = useMousePosition()
    // 发送请求
    // const {loading, data, errorMsg} = useRequest('data/address.JSON')   // 获取对象数据
    const {loading, data, errorMsg} = useRequest('data/products.json')  // 获取数组数据
    // 监听
    watch(data, () => {
      if(data.value){
        console.log(data.value.length);
      }
    })
    return {
      x,
      y,
      loading,
      data,
      errorMsg
    }
  }
})
</script>

src下hooks的 useMousePosition.ts

import { ref, onBeforeUnmount, onMounted } from 'vue'
export default function () {
  const x = ref(-1)
  const y = ref(-1)
  
  // 点击事件的回调函数
  const clickHandler = (event:MouseEvent) => {
    x.value = event.pageX
    y.value = event.pageY
  }
  // 页面已经加载完毕了,再进行点击操作
  // 页面加载完毕的生命
  onMounted(() => {
    window.addEventListener('click',clickHandler)
  })
  // 页面卸载之前的生命周期组合Api
  onBeforeUnmount(() => {
    window.removeEventListener('click',clickHandler)
  })
  return {
    x,
    y
  }
}

src下hooks的 useRequest.ts

import { ref } from 'vue';
import axiOS from 'axios';
 
 
interface AddressData{
  id: number;
  address:string;
  distance:string;
}
interface ProductsData{
  id: string;
  title:string;
  price:number;
}
 
export default function (url:string) {
  // 加载的状态
  const loading = ref(true)
  // 请求成功的数据   // 用于数据格式替换  ProductsData
  const data = ref<ProductsData[] | null>(null)
  // 错误信息
  const errorMsg = ref('')
  // 发送请求
  axios.get(url).then(response => {
    // 改变加载状态
    loading.value = false
    data.value = response.data
  }).catch(error=>{
    console.log(111);
  })
 
  return {
    loading, 
    data,
    errorMsg
  }
}

public下data的  address.json

{
  "id": 1,
  "address": "陕西西安",
  "distance": "100m"
}

public下data的  products.json

[
  {
    "id":"001",
    "title": "华为",
    "price": 3000
  },
  {
    "id": "002",
    "title": "小米12",
    "price": 1900
  }
]

最后查看一下整体运行展示:

vue3 hooks函数示例

以ant-design-vue 2.2.8版Upload上传组件为例:

官方示例代码---封装前

<template>
  <a-upload
    v-model:file-list="fileList"
    name="file"
    :multiple="true"
    action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
    :headers="headers"
    @change="handleChange"
  >
    <a-button>
      <upload-outlined></upload-outlined>
      Click to Upload
    </a-button>
  </a-upload>
</template>
<script>
import { message } from 'ant-design-vue';
import { UploadOutlined } from '@ant-design/icons-vue';
import { defineComponent, ref } from 'vue';
export default defineComponent({
  components: {
    UploadOutlined,
  },
  setup() {
    const handleChange = info => {
      if (info.file.status !== 'uploading') {
        console.log(info.file, info.fileList);
      }
      if (info.file.status === 'done') {
        message.success(`${info.file.name} file uploaded successfully`);
      } else if (info.file.status === 'error') {
        message.error(`${info.file.name} file upload failed.`);
      }
    };
    const fileList = ref([]);
    return {
      fileList,
      headers: {
        authorization: 'authorization-text',
      },
      handleChange,
    };
  },
});
</script>

使用hooks函数封装后

<template>
  <a-upload
    v-model:file-list="fileList"
    name="file"
    :multiple="true"
    action="Https://www.mocky.io/v2/5cc8019d300000980a055e76"
    :headers="headers"
    @change="handleChange"
  >
    <a-button>
      <upload-outlined></upload-outlined>
      Click to Upload
    </a-button>
  </a-upload>
</template>
<script>
import { UploadOutlined } from '@ant-design/icons-vue';
import { defineComponent } from 'vue';
// hook
import useUpload from '../hooks/useUpload';
export default defineComponent({
  components: {
    UploadOutlined,
  },
  setup() {
    / 上传hooks
    const { fileList, headers, handleChange } = useUpload();
    return {
      fileList,
      headers,
      handleChange,
    };
  },
});
</script>

hooks函数

import { ref } from 'vue';
import { message } from 'ant-design-vue';
export default function useUpload() {
  const handleChange = (info) => {
    if (info.file.status !== 'uploading') {
      console.log(info.file, info.fileList);
    }
    
    if (info.file.status === 'done') {
      message.success(`${info.file.name} file uploaded successfully`);
    } else if (info.file.status === 'error') {
      message.error(`${info.file.name} file upload failed.`);
    }
  };
  
  const fileList = ref([]);
  return {
    fileList,
    headers: {
      authorization: 'authorization-text',
    },
    handleChange,
  };
}

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

--结束END--

本文标题: vue3的自定义hook函数使用

本文链接: https://www.lsjlt.com/news/146295.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • vue3的自定义hook函数使用
    目录自定义hook函数使用vue3 hooks函数示例官方示例代码---封装前使用hooks函数封装后hooks函数自定义hook函数使用 使用Vue3的组合API封装的可复用的功能...
    99+
    2024-04-02
  • 详解Vue 自定义hook 函数
    目录定义使用封装发ajax请求的hook函数(ts版本)定义 什么是hook 本质是一个函数,把 setup 函数中使用的 Composition API (组合API)进行了封装类...
    99+
    2024-04-02
  • Vue怎么自定义hook函数
    这篇文章主要介绍“Vue怎么自定义hook函数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么自定义hook函数”文章能帮助大家解决问题。定义什么是hook本质是一个函数,把 setup 函...
    99+
    2023-07-02
  • React自定义Hook-useForkRef的具体使用
    目录开篇思路实现自定义 Hook - useForkRef开篇 使用过 React 技术栈的同学相信都使用过 ref 传递给 render 中的元素,而在使用 React 封装组件时...
    99+
    2024-04-02
  • React自定义hook的方法
    目录什么是hook常用的有哪些hook自定义hook什么是hook Hook是 React 16.8 的新增特性。它通常与函数式组件同时使用。可以使函数式组件在不编写 class 的...
    99+
    2024-04-02
  • SparkSQL的自定义函数UDF使用
    目录Spark_SQL的UDF使用UDF简单使用Spark_SQL的UDF使用 用户自定义函数,也叫UDF,可以让我们使用Python/Java/Scala注册自定义函数,并在SQL...
    99+
    2023-02-01
    Spark SQL UDF Spark自定义函数UDF
  • vue3自定义hooks/可组合函数方式
    目录自定义hooks/可组合函数1.mixins方式的痛点2.传统mixins方式示例3.自定义hooks方式示例vue3(hooks)自定义hooks/可组合函数 vue3 com...
    99+
    2024-04-02
  • 使用JavaScript 定义自己的ajax函数
    由于用原生js的方式发起的网络请求,都是以查询字符串的形式,提交给服务器的,用户以对象的形式提交参数的话会比较方便,所以需要把用户传递过来的参数对象进行处理,定义resolveDat...
    99+
    2024-04-02
  • 自定义Hook的方法有哪些
    这篇文章主要介绍“自定义Hook的方法有哪些”,在日常操作中,相信很多人在自定义Hook的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”自定义Hook的方法有哪些”...
    99+
    2024-04-02
  • 深入理解React的自定义Hook
    自定义 Hooks 的核心是共享组件之间的逻辑。使用自定义 Hooks 能够减少重复的逻辑,更重要的是,自定义 Hooks 内部的代码描述了它们想做什么,而不是如何做。当你将逻辑提取到自定义Hooks 中时,你可以隐藏如何处理某些"...
    99+
    2023-05-14
    前端 代码规范 React.js
  • vue3+TS实现自定义指令长按触发绑定的函数
    目录编写自定义指令时遇到的几个难点1.自定义指令的类型2.在ts中使用setTimeout() 函数3.自定义指令的传参问题代码而然间看到一个在vue2中写的长按触发事件的自定义指定...
    99+
    2022-12-29
    vue3 ts自定义指令 vue3 ts自定义长按指令
  • vue3中的render函数里定义插槽和使用插槽
    目录render函数里定义插槽和使用插槽定义插槽定义有插槽的组件使用插槽vue3 render函数小变动render函数的参数render函数签名VNode属性格式render函数里...
    99+
    2024-04-02
  • 如何使用JavaScript定义自己的ajax函数
    这篇文章将为大家详细讲解有关如何使用JavaScript定义自己的ajax函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。由于用原生js的方式发起的网络请求,都是以查询字符串的形式,提交给服务器的,用户...
    99+
    2023-06-21
  • vue3 使用 monaco-editor 自定义代码补全。
    使用场景:         数据编辑时需要支持sql语法高亮, 并且支持自定义代码提示补全。 monaco详细说明和使用可参考另一篇发文Monaco Editor (vite/webpack + ts + vue项目使用) 步骤一:安装依赖...
    99+
    2023-09-17
    vue.js java
  • MySQL内置函数和自定义函数怎么使用
    这篇“MySQL内置函数和自定义函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL内置函数和自定义函数怎么...
    99+
    2023-07-02
  • 如何在SQLite中使用自定义函数
    在SQLite中使用自定义函数可以通过以下步骤实现: 创建一个自定义函数: CREATE FUNCTION my_functio...
    99+
    2024-03-14
    SQLite
  • Vue3中的setup与自定义指令怎么使用
    setup语法糖 最大好处就是所有声明部分皆可直接使用,无需return出去注意:部分功能还不完善,如:name、render还需要单独加入script标签按compositionAPI方式编写// setup 下还可以附加<scri...
    99+
    2023-05-14
    Vue3 setup
  • Vue3中的setup与自定义指令如何使用
    本篇内容主要讲解“Vue3中的setup与自定义指令如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3中的setup与自定义指令如何使用”吧!setup语法糖最大好处就是所有声明部分...
    99+
    2023-07-06
  • tensorflow2 自定义损失函数使用的隐藏坑
    Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制。当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用...
    99+
    2024-04-02
  • 使用自定义函数验证 MySQL 中的日期
    让我们创建一个自定义函数来验证 MySQL 中的日期 -mysql> set global log_bin_trust_function_creators=1; Query OK, 0 rows affected (0.03 sec)...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作