# ui-framework **Repository Path**: mirrors_codingapi/ui-framework ## Basic Information - **Project Name**: ui-framework - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-28 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [![npm](https://img.shields.io/npm/v/@codingapi/ui-framework.svg)](https://www.npmjs.com/package/@codingapi/ui-framework) # UI-Framework 一个基于 React 和 TypeScript 构建的 UI 框架。 ## 安装 ```bash npm install @codingapi/ui-framework # 或者使用 yarn yarn add @codingapi/ui-framework ``` ## 使用 ### 组件总线 ```javascript import React from "react"; import Space from "@/components/Space"; import {ComponentBus} from "@codingapi/ui-framework"; const MyComponent = () => { return (
my component
) } const ComponentBusTest = () => { const [pageVersion, setPageVersion] = React.useState(0); const COMPONENT_KEY = 'MyComponent'; const MyComponentContent = ComponentBus.getInstance().getComponent(COMPONENT_KEY); const handlerAddComponent = () => { ComponentBus.getInstance().registerComponent(COMPONENT_KEY, MyComponent); setPageVersion(Math.random()); } const handlerRemoveComponent = () => { ComponentBus.getInstance().removeComponent(COMPONENT_KEY); setPageVersion(Math.random()); } return ( <>

ComponentBus Test

Component: {MyComponentContent && ( )} ) } export default ComponentBusTest; ``` ### 事件总线使用 ```javascript import React from "react"; import Space from "@/components/Space"; import {EventBus} from "@codingapi/ui-framework"; const EventBusTest = () => { const handlerAddEvent = () => { EventBus.getInstance().on('test', (data: any) => { alert(data); }); } const handlerRemoveEvent = () => { EventBus.getInstance().off('test'); } const handlerEmitEvent = () => { EventBus.getInstance().emit('test', 'test event'); } return ( <>

EventBus Test

) } export default EventBusTest; ``` ### 访问控制 ```javascript import React from "react"; import {Access} from "@codingapi/ui-framework"; import Space from "./Space"; const AccessTest = () => { const [pageVersion, setPageVersion] = React.useState(Math.random()); const handlerAddRole = (role: string) => { const authorities = localStorage.getItem('authorities'); localStorage.setItem('authorities', JSON.stringify([...(authorities ? JSON.parse(authorities) : []), role])); setPageVersion(Math.random()); } const handlerRemoveRole = (role: string) => { const authorities = localStorage.getItem('authorities') || '[]'; localStorage.setItem('authorities', JSON.stringify(JSON.parse(authorities).filter((item: string) => item !== role))); setPageVersion(Math.random()); } const handlerRemoveAllRole = () => { localStorage.removeItem('authorities'); setPageVersion(Math.random()); } return ( <>

Access Role Test

hasRoles['admin']:
has admin role
HasAnyRoles['user']:
has user role
noAnyRoles['user']:
has user role
isNotRoles:
no role
) } export default AccessTest; ``` ### 微前端动态组件 ```javascript import React from "react"; import Space from "@/components/Space"; import {DynamicComponentUtils} from "@codingapi/ui-framework"; const MicroComponentTest = () => { const [url, setUrl] = React.useState('http://localhost:3000/remoteEntry.js'); const [scope, setScope] = React.useState('MircoApp'); const [module, setModule] = React.useState('./Header'); const [RemoteComponent, setRemoteComponent] = React.useState(null); const handlerAddComponent = () => { DynamicComponentUtils.loadRemoteScript(url) .then(() => { DynamicComponentUtils.loadRemoteComponent(scope, module) .then((ComponentModule:any) => { const Component = ComponentModule.default || ComponentModule; setRemoteComponent(() => Component); }) .catch(e => { console.log(e); }); }) .catch(e => { console.log(e); }); } const handlerRemoveComponent = () => { setRemoteComponent(() => null); } return ( <>

Load Micro Component Test

url: { setUrl(e.target.value); }}/>
scope: { setScope(e.target.value); }}/>
module: { setModule(e.target.value); }}/>
{RemoteComponent && } ) } export default MicroComponentTest; ``` ### 网络请求 ``` import React from "react"; import Space from "@/components/Space"; //@ts-ignore import {HttpClient,Response} from "@codingapi/ui-framework"; const httpClient = new HttpClient(10000,{ success:(msg:string)=>{ console.log('success',msg); }, error:(msg:string)=>{ console.log('error',msg); }, }); const HttpTest = ()=>{ const [url, setUrl] = React.useState('/api/products'); const handlerGet = ()=>{ httpClient.get(url).then((res:Response)=>{ const json = JSON.stringify(res); console.log(json); alert(json); }) } return ( <>

Http Test

url: { setUrl(e.target.value); }}/> ) } export default HttpTest; ``` ### 主题控制 ``` import React from "react"; import Space from "@/components/Space"; import {ThemeContext, ThemeProviderContext} from "../../../src"; import {EventBus} from "@codingapi/ui-framework"; const ThemeTest = () => { const themeContext = React.useContext(ThemeProviderContext); const [fontSize, setFontSize] = React.useState(themeContext?.getTheme().token.contentFontSize); React.useEffect(() => { EventBus.getInstance().on(ThemeContext.EVENT_CHANGE_CONTENT_FONT_SIZE, (data: string) => { setFontSize(data); }); return () => { EventBus.getInstance().off(ThemeContext.EVENT_CHANGE_CONTENT_FONT_SIZE); } }, []) return ( <>

Theme Test

font size:{fontSize}
) } export default ThemeTest; ``` 更多实例参考: https://github.com/codingapi/ui-framework/tree/main/playground ## 主要特性 - 组件总线:用于管理和注册组件 - 事件总线:用于组件间通信 - 访问控制:用于权限管理 - 微前端动态组件:支持动态加载和卸载组件 - 网络请求:封装了 HttpClient,支持 GET、POST、PUT、DELETE 等请求方式 - 主题控制:支持动态修改主题和字体大小 ## 开发 ```bash # 安装依赖 yarn install # 构建 yarn build # 发布 yarn push ``` ## 许可证 Apache-2.0