# 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
[](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