React+TS前台项目实战(六)-- 全局常用组件Button封装

文章目录

  • 前言
  • Button组件
    • 1. 功能分析
    • 2. 代码+注释说明
    • 3. 使用方式
    • 4. 效果展示
  • 总结


前言

今天这篇主要讲全局按钮组件封装,可根据UI设计师要求自定义修改。


Button组件

1. 功能分析

(1)可以通过className属性自定义按钮样式,传递样式类名来修改按钮的样式
(2)是否可点击由disabled属性控制,当disabled为true时,按钮被禁用
(3)加载状态由loading属性控制,当loading为true时,按钮显示加载动画

2. 代码+注释说明

// @/components/Button/index.tsx
import classNames from "classnames";
import styles from "./index.module.scss";

// 组件的属性类型
type Props = {
  // 按钮的文本
  text: string;
  // 自定义的类名
  className?: string;
  // 是否禁用按钮
  disabled?: boolean;
  // 是否显示加载动画
  loading?: boolean;
  // 点击按钮时的回调函数
  onClick: () => void;
};

// 按钮组件
export default (props: Props) => {
  // 解构属性
  const { text, className, disabled, loading, onClick } = props;
  return (
    // 按钮元素
    <button
      type="button"
      // 设置类名
      className={classNames(
        styles.container,
        // 禁用或加载时增加特定的类名
        (disabled || loading) && styles.isDisabled,
        className
      )}
      // 禁用时禁用快捷键操作
      onKeyDown={disabled ? undefined : onClick}
      // 禁用时禁用点击事件
      onClick={disabled ? undefined : onClick}
    >
      {/* 加载动画 */}
      {loading && <i className={`${styles.loading} iconfont icon-loading`}></i>}
      {/* 按钮文本 */}
      <span>{text}</span>
    </button>
  );
};
------------------------------------------------------------------------------
// @/components/Button/index.module.scss
.container {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 40px;
  color: #fff;
  background-color: var(--cd-primary-color);
  border-radius: 4px;
  border: none;
  cursor: pointer;
  span {
    font-size: 14px;
    line-height: 14px;
  }
  &:hover {
    background-color: var(--cd-primary-color);
  }
  .isDisabled {
    opacity: 0.5;
    cursor: not-allowed;
  }
  @keyframes rotate {
    0% {
      transform: rotate(0deg);
    }
    50% {
      transform: rotate(180deg);
    }
    100% {
      transform: rotate(360deg);
    }
  }
  .loading {
    font-size: 24px;
    animation: rotate 2s linear infinite;
  }
}

3. 使用方式

// 引入组件
import Button from "@/components/Button";
import { useState } from 'react'
const [ loading,setLoading ] = useState(false)
// 使用
<Button text='确定' loading={loading} onClick={onDoneClick}></Button>

4. 效果展示

在这里插入图片描述

在这里插入图片描述


总结

下一篇讲【全局模态框Modal组件、公共弹窗Dialog组件封装】。关注本栏目,将实时更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/698499.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZDH-智能营销-标签模块

目录 主题 项目源码 预览地址 安装包下载地址 标签模块 什么是标签 标签场景分类 标签设计 标签按照场景做了分类&#xff0c;但是运营人员需要感知到吗 标签按照场景做了分类&#xff0c;底层的计算引擎是否需要划分&#xff1f; 标签模块&#xff0c;是否需要涉及…

利安科技上市首日股价大涨:2023营收净利润下滑,募资金额大幅缩水

《港湾商业观察》施子夫 6月7日&#xff0c;宁波利安科技股份有限公司&#xff08;以下简称&#xff0c;利安科技&#xff09;正式在深交所创业板挂牌上市&#xff0c;股票简称为利安科技&#xff0c;股票代码300784。 上市当天&#xff0c;利安科技股价大涨348.76%。 2022年…

DriveWorld:一个预训练模型大幅提升检测+地图+跟踪+运动预测+Occ多个任务性能

1. 写在前面 以视觉为中心的自动驾驶技术近期因其较低的成本而引起了广泛关注&#xff0c;而预训练对于提取通用表示至关重要。然而&#xff0c;当前的以视觉为中心的预训练通常依赖于2D或3D预训练任务&#xff0c;忽视了自动驾驶作为4D场景理解任务的时序特征。这里通过引入一…

Golang | Leetcode Golang题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; func candy(ratings []int) int {n : len(ratings)ans, inc, dec, pre : 1, 1, 0, 1for i : 1; i < n; i {if ratings[i] > ratings[i-1] {dec 0if ratings[i] ratings[i-1] {pre 1} else {pre}ans preinc pre} else {decif dec…

mmdetection使用未定义backbone训练

首先找到你需要用到的 backbone&#xff0c;一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 fastercnn 作为举例&#xff0c;在mmdetection中并未提供 mobilenetv3&#xff0c;提供的仅有 mobilenetv2&#xff1b; 在github上找到 mobil…

Selenium三种等待方式的使用!

UI自动化测试&#xff0c;大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中&#xff0c;经常出现元素定位不到的情况&#xff0c;究其原因&#xff0c;无非两种情况&#xff1a;1、有frame&#xff1b;2、没有设置等待。 因为代码运行速度和浏览器…

【Vue】购物车案例-构建项目

脚手架新建项目 (注意&#xff1a;勾选vuex) 版本说明&#xff1a; vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex&#xff0c;由于这个项目只有一个页面&#xff0c;vuex可勾可不勾 将原本src内容清空&#xff0c;替换成教学…

VISIO安装教程+安装包

文章目录 01、什么是VISIO&#xff1f;02、安装教程03、常见安装问题解析 01、什么是VISIO&#xff1f; Visio是由微软开发的流程图和图表绘制软件&#xff0c;它是Microsoft Office套件的一部分。Visio提供了各种模板和工具&#xff0c;使用户能够轻松创建和编辑各种类型的图…

SwiftUI七使用UI控件

代码下载 在应用中&#xff0c;用户可以创建一个简介来描述他们自已的个人情况。为了让用户可以编辑自己的简介&#xff0c;需要添加一个编辑模式并设计一个偏好设置界面。这里使用多种通用控件来展示用户的各种数据&#xff0c;并在用户保存他们所做的数据修改时更新地标数据…

PCB 蚀刻因子(Etch Factor)

The standard definition for Etch Factor is to specify it as the ratio of trace thickness / amount of over-etching. This gives the following formula: Etch Factor T/[0.5(W1-W2)] 例如&#xff0c;W1 5.2mil&#xff0c; W1 4.2mil&#xff0c; T 3.7mil&#…

四维轻云|支持多源数据融合、城市级实景三维模型展示

四维轻云是一款轻量化的地理空间数据管理云平台&#xff0c;具有项目管理、数据上传、场景搭建、发布分享、素材库等功能模块&#xff0c;支持多用户在线协作管理&#xff0c;实现了轻量化、便捷化的空间数据应用。 1、多源数据融合 平台支持管理、展示各类空间数据&#xff…

差动放大器

差动器的出现是为了解决直接耦合电路存在的零点漂移问题&#xff0c;另外&#xff0c;差动放大器还有灵活的输入&#xff0c;输出方式。 一&#xff0c;基本差动放大器 差动放大器在电路结构上具有对称性&#xff0c;三极管VT1&#xff0c;VT2同型号&#xff0c;R1R2,R3R4,R5…

【天池科普】1. 为啥人人都要学AI

大家好&#xff01;欢迎来到天池的AI科普系列课程&#xff0c;本期是第一期内容。在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;不仅是技术进步的标志&#xff0c;更是推动社会向前发展的强大引擎。无论你是AI领域的新手&#xff0c;还是有一定基础的学…

助力高考,一组彩色的文字

1、获取文本内容 首先&#xff0c;获取每个<div>元素的文本内容&#xff0c;并清空其内部HTML&#xff08;innerHTML ""&#xff09;。 2、创建<span>元素 然后&#xff0c;它遍历文本的每个字符&#xff0c;为每个字符创建一个新的<span>元素…

【Hudi】编译

目录 编译安装编译环境准备编译Hudi上传源码包修改pom文件新增repository加速依赖下载修改依赖的组件版本 修改源码兼容hadoop3手动安装Kafka依赖1&#xff09;下载jar包2&#xff09;install到maven本地仓库 解决spark模块依赖冲突 执行编译命令编译成功 编译安装 编译环境准…

用友U8 表单视图名查询方法

比如要获取【采购订单】表名和视图名 具体操作如下&#xff1a; 先打开写字板&#xff0c;然后进入U8的采购订单做单界面&#xff0c;按住键盘上的&#xff0c;CtrlshiftC&#xff0c;有的是CtrlC&#xff0c;点增加 然后CtrlV到写字板 key就是采购订单的值 打开SQL 输入语句…

AI绘画工具Ideogram测评:和Midjourney不分伯仲的AI图像工具之一

Ideogram 是一款令人印象深刻的人工智能图像工具&#xff0c;但尽管它于去年 8 月推出并具有不可思议的文本渲染能力&#xff0c;但它并没有引起其他一些更引人注目的 GenAI 服务的关注。 随着该公司推出其生成式人工智能模型 1.0 版本&#xff0c;这种情况即将发生改变&#…

Qt OPC UA初体验

介绍 OPC UA全称Open Platform Unified Architecture&#xff0c;开放平台统一架构&#xff0c;是工业自动化领域通用的数据交换协议&#xff0c;它有两套主要的通信机制&#xff1a;1.客户端-服务器通信&#xff1b;2.发布订阅。Qt对OPC UA通信标准也提供了支持&#xff0c;目…

【雷达原理】一维CFAR检测算法——对比分析与代码实现

目录 引言一、仿真实例1.1 均匀背景杂波1.2 杂波边缘1.3 多干扰目标杂波 二、MATLAB代码参考文献 引言 推荐博文【目标检测】雷达目标CFAR检测算法 上述文章介绍了四种典型CFAR检测算法的特点及性能对比。本文将利用MATLAB进行仿真&#xff0c;通过实例验证和对比这几种算法的…

❤ npm运行打包报错归纳

❤ 前端运行打包报错归纳 &#xff08;安装依赖&#xff09;Cannot read property ‘pickAlgorithm’ of null" npm uninstall //删除项目下的node_modules文件夹 npm cache clear --force //清除缓存后 npm install //重新安装 备用安装方式 npm install with --for…