基于 Radix UI 原语构建的企业级 React 组件库,支持 tree-shaking——按需引入单个组件时,其余组件不会进入 bundle。
message.success())与声明式组件(<MessageContainer />)均可使用iap- 前缀,按需自定义pnpm add @iap/ui
peerDependencies:需要
react >= 19和react-dom >= 19。
| 组件 | 入口 | 说明 |
|---|---|---|
| Message | @iap/ui/message |
全局轻提示,支持 success / error / warning / info |
全局消息提示,通过命令式 API 触发,自动挂载到 document.body(Radix Portal)。
在应用根组件挂载 <MessageContainer /> 一次:
import { MessageContainer } from '@iap/ui'
export default function App() {
return (
<>
<Router />
<MessageContainer />
</>
)
}
在任意位置调用 API:
import { message } from '@iap/ui'
message.success('Saved successfully')
message.error('Request failed')
message.warning('Please check your input')
message.info('New version available')
import { message, clear, remove } from '@iap/ui/message'
message.success(content, options?)message.error(content, options?)message.warning(content, options?)message.info(content, options?)显示一条消息,返回消息 id。
const id = message.success('Done', { duration: 5000 })
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
content |
string |
— | 消息内容 |
options.duration |
number |
3000 |
自动关闭时长(ms),0 表示不自动关闭 |
message.remove(id)手动移除指定消息。
const id = message.info('Loading...', { duration: 0 })
// 完成后手动关闭
message.remove(id)
message.clear()清空所有消息。
remove(id) / clear() / subscribe(listener) / getItems()细粒度状态操作,通过按需路径引入:
import { remove, clear, subscribe, getItems } from '@iap/ui/message'
// 订阅消息队列变更
const unsubscribe = subscribe((items) => console.log(items))
// 取消订阅
unsubscribe()
import type { MessageType, MessageOptions, MessageItem } from '@iap/ui/message'
// MessageType = 'success' | 'error' | 'warning' | 'info'
// MessageOptions
interface MessageOptions {
duration?: number
}
// MessageItem
interface MessageItem {
id: string
type: MessageType
content: string
duration: number
}
组件不内置样式,CSS 类名规则如下:
| 类名 | 说明 |
|---|---|
.iap-message-container |
消息容器(<section>) |
.iap-message |
单条消息 |
.iap-message--success |
success 类型修饰 |
.iap-message--error |
error 类型修饰 |
.iap-message--warning |
warning 类型修饰 |
.iap-message--info |
info 类型修饰 |
.iap-message__icon |
图标区域 |
.iap-message__content |
内容区域 |
.iap-message__close |
关闭按钮 |
也可通过 data-type 属性选择器定制:
.iap-message[data-type="success"] { border-left: 4px solid green; }
.iap-message[data-type="error"] { border-left: 4px solid red; }
只引入 Message 组件时,其他尚未发布的组件不会进入 bundle:
// 只打包 message 相关代码
import { message } from '@iap/ui/message'
见 CHANGELOG.md。