首页 > 其他分享 >ssts-hospital-web-master项目实战记录二十四:项目迁移-Hook函数(useCountdown)

ssts-hospital-web-master项目实战记录二十四:项目迁移-Hook函数(useCountdown)

时间:2024-02-27 09:33:39浏览次数:29  
标签:web const ssts hospital counter stop 倒计时 start useCountdown

记录时间:2024-02-26

 

【使用“文心一言”搜索】

指令:Vue项目使用ts setup 语法,实现页面倒计时,封装Hook函数,包含start、reset、stop

在Vue 3中,你可以使用<script setup>语法和Composition API来封装一个倒计时Hook函数,该函数包含startresetstop等方法。下面是如何实现这个倒计时Hook并在Vue组件中使用的示例:

1. 封装自定义Hook函数(useCountdown.ts)

typescript复制代码
  import { ref, onUnmounted } from 'vue';
   
  export function useCountdown(initialSeconds: number) {
  const counter = ref(initialSeconds);
  let interval: ReturnType<typeof setInterval> | null = null;
   
  const start = () => {
  if (!interval) {
  interval = setInterval(() => {
  if (counter.value > 0) {
  counter.value--;
  } else {
  stop();
  // 可以在这里添加倒计时结束后的逻辑
  }
  }, 1000);
  }
  };
   
  const stop = () => {
  if (interval) {
  clearInterval(interval);
  interval = null;
  }
  };
   
  const reset = (seconds: number = initialSeconds) => {
  stop();
  counter.value = seconds;
  };
   
  onUnmounted(stop);
   
  // 不自动开始倒计时,由组件控制
  // start();
   
  return {
  counter,
  start,
  stop,
  reset,
  };
  }

2. 在Vue组件中使用自定义Hook

vue复制代码
  <template>
  <div>
  <p>倒计时:{{ counter }}</p>
  <button @click="startCountdown">开始倒计时</button>
  <button @click="resetCountdown">重置倒计时</button>
  <button @click="stopCountdown">停止倒计时</button>
  </div>
  </template>
   
  <script setup lang="ts">
  import { useCountdown } from './useCountdown';
   
  const initialSeconds = 10; // 初始倒计时秒数
  const { counter, start, stop, reset } = useCountdown(initialSeconds);
   
  const startCountdown = () => {
  start();
  };
   
  const stopCountdown = () => {
  stop();
  };
   
  const resetCountdown = () => {
  reset(initialSeconds); // 重置到初始秒数
  };
  </script>

在这个示例中:

  • useCountdown函数接受一个initialSeconds参数,表示倒计时的初始秒数。
  • counter是一个响应式引用,用于存储倒计时的当前值。
  • start函数用于开始倒计时。
  • stop函数用于停止倒计时,并清除计时器。
  • reset函数用于停止当前的倒计时(如果正在运行)并将counter重置为指定的秒数(默认为初始秒数)。注意这里没有重新开始倒计时,如果你希望在重置后立即开始,可以在reset函数的最后调用start()
  • 使用onUnmounted生命周期钩子来确保在组件卸载时停止倒计时,防止内存泄漏。
  • 在组件中,我们使用useCountdown来获取counterstartstopreset,并在模板中显示倒计时和添加相应的按钮来控制倒计时。

 

翻译

搜索

复制

<iframe></iframe>

标签:web,const,ssts,hospital,counter,stop,倒计时,start,useCountdown
From: https://www.cnblogs.com/lizhigang/p/18036180

相关文章

  • ssts-hospital-web-master项目实战记录三十一:项目迁移-Vue项目Hook和插件的区别
    记录时间:2024-02-27一、准备工作【使用“文心一言”搜索】Vue中的生命周期钩子与React中的生命周期方法有何异同?Vue3中的Hook是组合式API的一部分,它们提供了一种新的方式来组织和复用组件逻辑。这些Hook函数,如setup、onMounted、onUpdated等,都是在组件的不同生命周期阶段被调......
  • Web页面请求历程
    本文仅对Web页面请求历程进行简单的介绍,由于作者初学计算机网络,同时也没有学习图论的知识,若有不妥之处还请指出.一、准备DHCP、UDP、IP和以太网以我的笔记本为例,我的笔记本与网络连接,此时笔记本没有ip地址,所以无法进行操作先获取ip地址,笔记本的操作系统生成一个DHCP请求......
  • ssts-hospital-web-master项目实战记录三十二:项目迁移-Vue项目Hook和插件的区别
    记录时间:2024-02-27一、准备工作【使用“文心一言”搜索】Vue3中的Hook(如setup、onMounted、onUpdated等)具体是如何工作的?它们与组件的生命周期有何关联?Vue3引入了CompositionAPI,这是一种新的、可选的方式来组织和重用Vue组件的逻辑。在CompositionAPI中,Hook(如setup、onMo......
  • webserver服务器学习记录
    利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求利用标准库容器封装char,实现自动增长的缓冲区基于小根堆实现的定时器,关闭超时的非活动连接利用单例模式与阻塞队列实现异步的日志系统,记录服务器......
  • Taurus.MVC WebMVC 入门开发教程2:一个简单的页面呈现
    前言:在上一篇中,我们了解了如何下载、配置和运行Taurus.MVCWebMVC框架。现在,让我们开始编写一个简单的页面并进行呈现。步骤1:创建控制器首先,我们需要创建一个控制器来处理页面呈现的逻辑。在VisualStudio中,右键单击项目文件夹,选择「添加」->「类」。在弹出的对话框中,......
  • ssts-hospital-web-master项目实战记录三十:项目迁移-插件实现说明
    记录时间:2024-02-26一、准备工作【使用“文心一言”搜索:Vue.js中模块和插件有什么区别?】在Vue.js中,模块(Modules)和插件(Plugins)都是用于扩展和增强Vue.js功能的方式,但它们在使用和目的上有一些不同。模块(Modules)模块是Vue.js中组织代码的一种方式,通常用于将应用程序划分为不同......
  • vue init webpack 和vue create的几点区别
    vueinitwebpack和vuecreate的几点区别:https://blog.csdn.net/xilejie/article/details/130061075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891269616800184194526%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request......
  • 一个支持Sora模型文本生成视频的Web客户端
    大家好,我是Java陈序员。最近OpenAI又火了一把,其新推出的文本生成视频模型——Sora,引起了巨大的关注。Sora目前仅仅只是发布预告视频,还未开放出具体的API.今天,给大家推荐一个最近十分火热的开源项目,一个支持使用Sora模型将文本生成视频的Web客户端。关注微信公众......
  • ssts-hospital-web-master项目实战记录十六:项目迁移-模块实现(page-info)
    记录时间:2024-02-25二、page-info模块实现framework/page-info/index.ts//javascript用来遍历指定对象所有的属性名称和值//obj需要遍历的对象constallProps=function(obj:any,props:string=''):string{ //使用Object.keys()获取对象自身的所有属性键 ......
  • ssts-hospital-web-master项目实战记录十四:项目迁移-模块实现(log-local)
    记录时间:2024-02-25一、log-local模块实现framework/config/index.ts//终端日志文件配置constLogTerminalInfoDir='D:\\LogInfo\\LogTerminalInfo\\'constLogTerminalInfoFileNamePrefix='LogTerminalInfo'//错误页面快照文件配置constLogErrorPageSnapshotFil......