当前位置: 首页 > news >正文

yggjs_rbutton React按钮组件v1.0.0 多主题系统使用指南

概述

YggJS按钮组件库提供了一个强大的多主题系统,支持科技风和极简风两种设计风格。本指南将详细介绍如何使用、配置和扩展这个多主题系统。

目录

  • 快速开始
  • 主题系统架构
  • 科技风主题
  • 极简主题
  • 主题切换
  • 自定义主题
  • 性能优化
  • 最佳实践
  • API参考
  • 故障排除

快速开始

安装

npm install yggjs-rbutton

基本使用

import React from 'react';
import { TechButton, MinimalButton } from 'yggjs-rbutton';function App() {return (<div>{/* 科技风按钮 */}<TechButton variant="primary">科技风按钮</TechButton>{/* 极简按钮 */}<MinimalButton variant="primary">极简按钮</MinimalButton></div>);
}

主题系统架构

设计原则

  1. 统一接口: 所有主题使用相同的API接口
  2. 独立加载: 支持按需加载特定主题
  3. 类型安全: 完整的TypeScript类型支持
  4. 性能优先: 优化的样式计算和缓存机制
  5. 可扩展性: 易于添加新主题和自定义配置

核心组件

src/
├── core/                    # 核心系统
│   ├── types/              # 类型定义
│   ├── theme-engine/       # 主题引擎
│   └── validation/         # 验证系统
├── themes/                 # 主题实现
│   ├── tech/              # 科技风主题
│   └── minimal/           # 极简主题
└── components/            # 通用组件

科技风主题

特点

  • 视觉效果: 渐变背景、发光效果、科幻感边框
  • 颜色系统: 以蓝色和紫色为主的科技色调
  • 动画: 流畅的悬停和点击动画效果
  • 适用场景: 科技产品、游戏界面、创新应用

基本使用

import { TechButton } from 'yggjs-rbutton';function TechInterface() {return (<div><TechButton variant="primary">主要操作</TechButton><TechButton variant="secondary">次要操作</TechButton><TechButton variant="danger">危险操作</TechButton><TechButton variant="success">成功操作</TechButton></div>);
}

高级配置

import { TechThemeProvider, useTechTheme } from 'yggjs-rbutton/tech';function App() {const techConfig = {glowIntensity: 'high',animationSpeed: 'fast',colorScheme: 'cyberpunk',borderStyle: 'neon',};return (<TechThemeProvider config={techConfig}><TechInterface /></TechThemeProvider>);
}function TechInterface() {const { theme, setGlowIntensity } = useTechTheme();return (<div><TechButton variant="primary"size="large"glow={theme.glowIntensity}onClick={() => setGlowIntensity('ultra')}>超级按钮</TechButton></div>);
}

极简主题

特点

  • 设计理念: 简洁、清晰、无多余装饰
  • 颜色系统: 灰度为主的温和色调
  • 交互: 微妙的状态变化和反馈
  • 适用场景: 商务应用、文档工具、专业软件

基本使用

import { MinimalButton } from 'yggjs-rbutton';function MinimalInterface() {return (<div><MinimalButton variant="primary">主要操作</MinimalButton><MinimalButton variant="secondary" fill="outline">次要操作</MinimalButton><MinimalButton variant="ghost" size="small">辅助操作</MinimalButton></div>);
}

高级配置

import { MinimalThemeProvider, useMinimalTheme } from 'yggjs-rbutton/minimal';function App() {const minimalConfig = {colorMode: 'light',borderRadius: 'medium',fontWeight: 'normal',shadows: 'subtle',};return (<MinimalThemeProvider config={minimalConfig}><MinimalInterface /></MinimalThemeProvider>);
}function MinimalInterface() {const { theme, toggleColorMode } = useMinimalTheme();return (<div><MinimalButton variant="primary"onClick={toggleColorMode}>切换{theme.colorMode === 'light' ? '深色' : '浅色'}模式</MinimalButton></div>);
}

主题切换

动态主题切换

import { useState } from 'react';
import { TechButton, MinimalButton } from 'yggjs-rbutton';function ThemeSwitcher() {const [currentTheme, setCurrentTheme] = useState('tech');const ButtonComponent = currentTheme === 'tech' ? TechButton : MinimalButton;return (<div><div><button onClick={() => setCurrentTheme('tech')}>科技风</button><button onClick={() => setCurrentTheme('minimal')}>极简风</button></div><ButtonComponent variant="primary">当前主题按钮</ButtonComponent></div>);
}

主题预览组件

import { ThemePreview } from 'yggjs-rbutton';function ThemeSelector() {return (<ThemePreviewthemes={['tech', 'minimal']}onThemeChange={(theme) => console.log('选择主题:', theme)}showVariants={['primary', 'secondary', 'danger']}/>);
}

自定义主题

创建新主题

import { createTheme, BaseButtonProps } from 'yggjs-rbutton/core';// 定义主题配置
const customTheme = createTheme({name: 'custom',colors: {primary: {500: '#6366f1',600: '#5b21b6',700: '#4c1d95',},secondary: {500: '#64748b',600: '#475569',700: '#334155',},},typography: {fontFamily: 'Inter, system-ui, sans-serif',fontSize: {sm: '0.875rem',md: '1rem',lg: '1.125rem',},},spacing: {xs: '0.5rem',sm: '0.75rem',md: '1rem',lg: '1.5rem',},borderRadius: {sm: '0.375rem',md: '0.5rem',lg: '0.75rem',},animation: {duration: '200ms',easing: 'cubic-bezier(0.4, 0, 0.2, 1)',},
});// 实现按钮组件
export const CustomButton: React.FC<BaseButtonProps> = (props) => {const styles = useCustomTheme(props);return (<button css={styles} {...props}>{props.children}</button>);
};

扩展现有主题

import { extendTheme, techTheme } from 'yggjs-rbutton/core';const extendedTechTheme = extendTheme(techTheme, {colors: {primary: {// 覆盖原有的主色调500: '#00ff88',600: '#00cc6a',700: '#00994d',},// 添加新颜色neon: {500: '#ff0080',600: '#cc0066',700: '#99004d',},},// 添加新的样式变体variants: {neon: {backgroundColor: 'neon.500',color: 'white',border: '2px solid transparent',boxShadow: '0 0 20px neon.500','&:hover': {backgroundColor: 'neon.600',boxShadow: '0 0 30px neon.600',},},},
});

性能优化

样式缓存

import { StyleCacheProvider } from 'yggjs-rbutton/core';function App() {return (<StyleCacheProvider cacheSize={100} enableDevTools={process.env.NODE_ENV === 'development'}><YourApp /></StyleCacheProvider>);
}

按需加载

// 动态导入特定主题
const loadTechTheme = () => import('yggjs-rbutton/tech');
const loadMinimalTheme = () => import('yggjs-rbutton/minimal');function ThemeLoader({ themeName, children }) {const [Theme, setTheme] = useState(null);useEffect(() => {const loadTheme = themeName === 'tech' ? loadTechTheme : loadMinimalTheme;loadTheme().then((module) => {setTheme(() => module.default);});}, [themeName]);if (!Theme) return <div>加载中...</div>;return <Theme>{children}</Theme>;
}

Bundle优化

// webpack.config.js
module.exports = {optimization: {splitChunks: {cacheGroups: {// 将主题相关代码分离成独立的chunkthemes: {test: /[\\/]themes[\\/]/,name: 'themes',chunks: 'all',},},},},
};

最佳实践

1. 组件命名规范

// ✅ 推荐:清晰的主题前缀
import { TechButton, MinimalButton } from 'yggjs-rbutton';// ❌ 避免:通用命名可能导致冲突
import { Button } from 'yggjs-rbutton';

2. 类型安全

import type { TechButtonProps, MinimalButtonProps } from 'yggjs-rbutton';interface AppButtonProps {theme: 'tech' | 'minimal';variant: TechButtonProps['variant'] | MinimalButtonProps['variant'];
}const AppButton: React.FC<AppButtonProps> = ({ theme, ...props }) => {if (theme === 'tech') {return <TechButton {...props as TechButtonProps} />;}return <MinimalButton {...props as MinimalButtonProps} />;
};

3. 性能监控

import { usePerformanceMonitor } from 'yggjs-rbutton/core';function ButtonWithMonitoring(props) {const { measureRender } = usePerformanceMonitor();return measureRender('button-render',<TechButton {...props} />,{threshold: 16, // 16ms (60fps)onSlowRender: (duration) => {console.warn('按钮渲染较慢:', duration, 'ms');},});
}

4. 错误边界

import { ThemeErrorBoundary } from 'yggjs-rbutton/core';function App() {return (<ThemeErrorBoundary fallback={<button>按钮加载失败</button>}onError={(error, errorInfo) => {console.error('主题错误:', error, errorInfo);}}><TechButton>科技按钮</TechButton></ThemeErrorBoundary>);
}

API参考

通用Button属性

interface BaseButtonProps {/** 按钮变体 */variant?: 'primary' | 'secondary' | 'danger' | 'success' | 'warning' | 'info';/** 按钮大小 */size?: 'small' | 'medium' | 'large';/** 填充样式 */fill?: 'solid' | 'outline' | 'ghost';/** 按钮形状 */shape?: 'square' | 'round' | 'pill';/** 是否禁用 */disabled?: boolean;/** 是否显示加载状态 */loading?: boolean;/** 加载状态文本 */loadingText?: string;/** 按钮图标 */icon?: React.ReactNode;/** 图标位置 */iconPosition?: 'left' | 'right';/** 点击事件处理 */onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;/** 子元素 */children?: React.ReactNode;/** 自定义样式类名 */className?: string;/** 内联样式 */style?: React.CSSProperties;/** HTML属性 */[key: string]: any;
}

TechButton特有属性

interface TechButtonProps extends BaseButtonProps {/** 发光强度 */glow?: 'none' | 'low' | 'medium' | 'high' | 'ultra';/** 边框样式 */borderStyle?: 'solid' | 'neon' | 'pulse' | 'gradient';/** 动画类型 */animation?: 'none' | 'glow' | 'pulse' | 'matrix' | 'cyberpunk';/** 粒子效果 */particles?: boolean;/** 音效 */sound?: 'none' | 'click' | 'hover' | 'futuristic';
}

MinimalButton特有属性

interface MinimalButtonProps extends BaseButtonProps {/** 色彩模式 */colorMode?: 'light' | 'dark' | 'auto';/** 文字重量 */fontWeight?: 'light' | 'normal' | 'medium' | 'semibold';/** 边框半径 */borderRadius?: 'none' | 'small' | 'medium' | 'large' | 'full';/** 阴影样式 */shadow?: 'none' | 'subtle' | 'soft' | 'medium';
}

主题Provider属性

interface ThemeProviderProps {/** 主题配置 */config?: ThemeConfig;/** 是否启用样式缓存 */enableCache?: boolean;/** 缓存大小限制 */cacheSize?: number;/** 是否启用开发者工具 */enableDevTools?: boolean;/** 子组件 */children: React.ReactNode;
}

故障排除

常见问题

1. 样式不生效

问题: 按钮样式没有正确应用

解决方案:

// 确保主题Provider正确包裹
import { TechThemeProvider } from 'yggjs-rbutton/tech';function App() {return (<TechThemeProvider><TechButton variant="primary">按钮</TechButton></TechThemeProvider>);
}
2. TypeScript类型错误

问题: TypeScript报告类型不匹配

解决方案:

// 确保导入正确的类型
import type { TechButtonProps } from 'yggjs-rbutton';const MyButton: React.FC<TechButtonProps> = (props) => {return <TechButton {...props} />;
};
3. 性能问题

问题: 按钮渲染较慢或内存占用高

解决方案:

// 启用样式缓存
import { StyleCacheProvider } from 'yggjs-rbutton/core';function App() {return (<StyleCacheProvider cacheSize={50}>{/* 你的应用 */}</StyleCacheProvider>);
}// 使用React.memo优化
const OptimizedButton = React.memo(TechButton);
4. 主题切换闪烁

问题: 主题切换时出现样式闪烁

解决方案:

// 预加载主题样式
import { preloadTheme } from 'yggjs-rbutton/core';function App() {useEffect(() => {preloadTheme('tech');preloadTheme('minimal');}, []);// 使用平滑过渡return (<div style={{ transition: 'all 0.3s ease' }}>{/* 你的内容 */}</div>);
}

调试工具

import { ThemeDevTools } from 'yggjs-rbutton/core';function App() {return (<><YourApp />{process.env.NODE_ENV === 'development' && <ThemeDevTools />}</>);
}

支持和反馈

  • GitHub Issues: https://github.com/yggjs/yggjs-rbutton/issues
  • 文档: https://yggjs.github.io/yggjs-rbutton
  • 示例: https://github.com/yggjs/yggjs-rbutton/examples

版本: 1.0.0
最后更新: 2025年
维护者: 源滚滚AI编程

http://www.dtcms.com/a/352136.html

相关文章:

  • 什么叫API对接HR系统?
  • 2025年8月技术问答第3期
  • 03MySQL——DCL权限控制,四种常用函数解析
  • SSM入门到实战: 3.6 SpringMVC RESTful API开发
  • 基于muduo库的图床云共享存储项目(一)
  • vs2019安装cpu版本的fftw 以实现傅里叶变换
  • 《护理学》10月版面征稿论文速递
  • 【46页PPT】AI智能中台用ABC+IOT重新定义制造(附下载方式)
  • SQLBot:一款基于大语言模型和RAG的智能数据分析工具
  • AI人工智能一体化HR系统如何选型?
  • 重塑金融管理会计核心引擎,容智管会智能体打造智能决策新基建
  • 手写MyBatis第35弹:@Select、@Insert等注解的背后原理
  • 【软考论文】论DevOps及其应用
  • BotCash:2025 中国算力大会——国家级数据标注产业供需对接大会
  • 【自记】Python 局部变量、全局变量及global的示例
  • Python实现RANSAC进行点云直线、平面、曲面、圆、球体和圆柱拟合
  • 负载均衡之平滑加权轮询(Smooth Weighted Round Robin)详解与实现
  • 前沿技术趋势与应用:探索数字世界的下一个十年
  • 本地通过阿里云ECS建立SSH隧道连接阿里云RDS MYSQL数据库
  • 【P2P】RELAY服务2:cmake+ c实现及ubuntu运行
  • 淘宝/天猫商品详情API数据解析【附代码】
  • 软件检测报告:XML外部实体(XXE)注入漏洞原因和影响
  • 【Erdas实验教程】031:遥感图像频率域增强(傅立叶变换)
  • BCI良好棉花认证标准及申请条件(2025年最新版)
  • 加密狗与U盘的核心区别,U盘能否替代加密狗?
  • 电力工程大模型驱动AI工程计算:从“算错挨骂”到“一键精准”
  • 开发指南135-CSS中定义参数
  • 技术干货丨基于SimSolid的塑胶模具温度场瞬态分析
  • 【贪心算法】day3
  • win11在安装com0com软件后,在设备管理器中虚拟串口黄色感叹号得解决方法