首页 > 其他分享 >如何在Reactjs中制作动态进度条

如何在Reactjs中制作动态进度条

时间:2024-09-22 09:51:28浏览次数:10  
标签:gt const 进度条 Reactjs react 组件 动态 仪表板

使用 react 和循环进度组件构建性能仪表板在本博客中,我们将探讨如何使用 react 构建性能指标仪表板。仪表板显示不同绩效指标(例如可访问性、seo 和最佳实践)的循环进度指示器。进度指示器逐渐填满,模拟加载动画。该项目使用 tailwind css 进行样式设计,并组合了多个组件来创建灵活且可重用的界面。项目概况我们将创建两个主要组件:circularprogress – 显示给定百分比的圆形进度条。仪表板 – 显示不同指标的多个进度条,例如性能、可访问性等。circularprogress 组件circularprogress 组件处理圆形进度条,它以指定的百分比进行动画处理。该组件采用以下属性:innercirclecolor:圆形进度内的背景颜色。百分比:完成的百分比。progresscolor: 进度条的颜色。bgcolor: 进度区域外的背景颜色。textcolor: 百分比文本的颜色。title:指标的标题。代码实现import react, { useeffect, useref, usestate } from 'react';interface circularprogressprops { innercirclecolor: string; percentage: number; progresscolor: string; bgcolor: string; textcolor: string; title: string;}const circularprogress: react.fc<circularprogressprops> = ({ innercirclecolor, percentage, progresscolor, bgcolor, textcolor, title,}) =&gt; { const [currentpercentage, setcurrentpercentage] = usestate(0); const innercircleref = useref<htmldivelement null>(null); useeffect(() =&gt; { const speed = 50; // speed of the animation const increment = () =&gt; { setcurrentpercentage((prev) =&gt; { if (prev &gt;= percentage) return percentage; return prev + 1; }); }; const interval = setinterval(increment, speed); return () =&gt; clearinterval(interval); }, [percentage]); return ( <div classname="flex flex-col justify-center gap-2"> <div classname="relative flex items-center justify-center w-12 h-12 rounded-full" style="{{" background:> <div classname="absolute w-[calc(100%_-_6px)] h-[calc(100%_-_6px)] rounded-full" style="{{" backgroundcolor: innercirclecolor ref="{innercircleref}"></div> <p classname="relative text-[16px] font-semibold" style="{{" color: textcolor> {currentpercentage}% </p> </div> <p classname="text-[10px] font-semibold text-center">{title}</p> </div> );};export default circularprogress;</htmldivelement></circularprogressprops>登录后复制仪表板组件dashboard 组件显示 circularprogress 组件的多个实例,每个实例代表不同的性能指标。代码实现import react from 'react';import circularprogress from './circularprogress';const dashboard: react.fc = () =&gt; { return ( <div classname="bg-white flex flex-col items-center border h-auto w-full xl:px-[14rem] lg:px-[5rem] sm:px-0 py-[5rem] justify-center"> <div classname="w-full border rounded"> <div classname="py-12 border-b"> {/* performance metrics */} <div classname="flex flex-wrap justify-center gap-14 items-center"> <circularprogress innercirclecolor="bisque" percentage="{99}" progresscolor="darkorange" bgcolor="bisque" textcolor="darkorange" title="performance"></circularprogress><circularprogress innercirclecolor="bisque" percentage="{96}" progresscolor="darkorange" bgcolor="bisque" textcolor="darkorange" title="accessibility"></circularprogress><circularprogress innercirclecolor="lightgreen" percentage="{90}" progresscolor="limegreen" bgcolor="lightgreen" textcolor="limegreen" title="best practices"></circularprogress><circularprogress innercirclecolor="bisque" percentage="{100}" progresscolor="darkorange" bgcolor="bisque" textcolor="darkorange" title="seo"></circularprogress></div> </div> </div> </div> );};export default dashboard;登录后复制主页组件除了进度条之外,仪表板还包括一个可折叠部分,其中显示有关服务器响应时间的更多详细信息。代码实现 import React, { useState } from 'react';import { IoIosArrowDown, IoIosArrowUp } from 'react-icons/io';const Home: React.FC = () =&gt; { const [isExpanded, setIsExpanded] = useState(false); const handleToggle = () =&gt; { setIsExpanded(!isExpanded); }; return ( <div classname="rounded-md w-full mb-4" id="server-response-time"> <div classname="flex flex-col border w-full justify-between items-center text-sm text-red-600"> <div classname="flex items-center p-3 justify-between w-full"> <span classname="ml-2 text-gray-800"> <span classname="text-red-700">??</span> Reduce initial server response time <span classname="text-red-500">— Root document took 820 ms</span> </span> <span classname="text-gray-800 cursor-pointer" onclick="{handleToggle}"> {isExpanded ? <ioiosarrowup></ioiosarrowup> : <ioiosarrowdown></ioiosarrowdown>} </span> </div> {isExpanded &amp;&amp; ( <div classname="bg-white border-t border-t-blue-600"> <div classname="py-8 pl-12 pr-4"> <p classname="text-[13px] text-gray-700"> Learn more about server response time and performance optimizations.{' '} <a classname="text-blue-500 underline" href="#" target="_blank" rel="noopener noreferrer"> Read more. </a> </p> </div> </div> )} </div> </div> );};export default Home;登录后复制结论此性能仪表板展示了如何在 react 中创建可重用的动画循环进度组件。通过以这种方式构建仪表板,您可以轻松扩展它以跟踪其他性能指标或将其集成到更广泛的应用程序中,使其成为可视化关键指标的强大工具。请随意根据您的项目调整此代码,并享受使用 react 创建性能仪表板! 以上就是如何在Reactjs中制作动态进度条的详细内容,更多请关注我的其它相关文章!

标签:gt,const,进度条,Reactjs,react,组件,动态,仪表板
From: https://www.cnblogs.com/aow054/p/18424957

相关文章

  • 如何在 ReactJS 中创建可重用的 Button 组件
    按钮无疑是任何react应用程序中重要的ui组件,按钮可能用于提交表单或打开新页面等场景。您可以在react.js中构建可重用的按钮组件,您可以在应用程序的不同部分中使用它们。因此,维护您的应用程序将变得更加简单,并且您的代码将保持dry(不要重复)。您必须首先在组件文件夹中创建一......
  • 动态编程变得简单:带有 JavaScript 示例的初学者指南
    通过javascript中的动态编程释放高效解决问题的能力。介绍您想提高编程中解决问题的能力吗?动态规划(dp)是一种强大的技术,可以帮助您高效地解决复杂问题。本初学者指南将通过javascript示例向您介绍动态编程,使其易于掌握并应用于实际场景。您将学到什么:动态规划的基本概念......
  • 使用 useRoleManagement Hook 处理不同环境中的动态角色名称(第 2 部分)
    在本系列的第一部分中,我们探索了使用userolemanagement钩子在react中实现基于角色的访问控制的基础。如果你还没有读过,可以在这里查看在react中实现基于角色的访问控制:深入探讨userolemanagementhook。在第二部分中,我们将根据不同的环境(例如登台和生产)更深入地管理动态角......
  • 基于多时段动态电价的电动汽车有序充电策略优化(Matlab代码实现)
    ......
  • 基于多时段动态电价的电动汽车有序充电策略优化(Matlab代码实现)
    ......
  • 【油猴脚本】00011 案例 Tampermonkey油猴脚本,动态渲染表格-实现页面动态-添加提取数
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 静态库和动态(共享)库
    前提要先了解gcc/g++编译器的基本命令1.库的介绍1)什么是库库是二进制文件,是源代码文件的另外一种表现形式,是一些功能相近或相似的函数的集合体。2)使用库有什么好处提高代码的可重用性,还可以提高程序的健壮性。减少开发者的代码开发量,缩短开发周期3)库制作完成后,如何给......
  • 动态规划——问题的特征与求解步骤精解
    动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子阶段,按顺序求解子阶段。与分治不同的是,在动态规划过程中,前一子问题的解,为后一子问题的求解提供了有用的信息,也就是......
  • Java中的动态配置更新:从配置中心到应用热加载的实现
    Java中的动态配置更新:从配置中心到应用热加载的实现大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代微服务架构中,动态配置更新已成为提高系统灵活性和可维护性的关键技术。通过实现配置中心与应用热加载,我们能够在不重启应用的情况下,快速更新配......
  • 基于Vue实现动态组织结构图
    最近一个项目里有个前端绘制家谱图的需求,大概是下面这个样子:组件源码如下<template><tablev-if="treeData.name"><tr><td:colspan="Array.isArray(treeData.children)?treeData.children.length*2:1":class......