UNPKG

zarm

Version:

基于 React 的移动端UI库

303 lines (267 loc) 8.24 kB
# Toast 轻提示 ## 基础用法 ```jsx import { useState } from 'react'; import { Toast, List, Button } from 'zarm'; const Demo = () => { return ( <> <List> <List.Item title="普通" suffix={ <> <Button size="xs" onClick={() => { Toast.show('提示内容'); }} > 开启 </Button> </> } /> </List> </> ); }; ReactDOM.render(<Demo />, mountNode); ``` ## 带图标提示 ```jsx import { useRef } from 'react'; import { Toast, List, Button } from 'zarm'; import { Warning } from '@zarm-design/icons'; const Demo = () => { return ( <List> <List.Item title="加载中" suffix={ <Button size="xs" onClick={() => { Toast.show({ icon: 'loading', }); }} style={{ marginLeft: 12 }} > 开启 </Button> } /> <List.Item title="成功" suffix={ <Button size="xs" onClick={() => { Toast.show({ icon: 'success', content: '预约成功', }); }} > 开启 </Button> } /> <List.Item title="失败" suffix={ <Button size="xs" onClick={() => { Toast.show({ icon: 'fail', content: '预约失败', }); }} style={{ marginLeft: 12 }} > 开启 </Button> } /> <List.Item title="自定义" suffix={ <Button size="xs" onClick={() => { Toast.show({ icon: <Warning />, content: '自定义内容', }); }} style={{ marginLeft: 12 }} > 开启 </Button> } /> </List> ); }; ReactDOM.render(<Demo />, mountNode); ``` ## 更多用法 ```jsx import { useRef, useState, useEffect } from 'react'; import { Toast, List, Button } from 'zarm'; import { Star } from '@zarm-design/icons'; const Countdown = (props) => { const [count, setCount] = useState(props.count); useEffect(() => { const timer = setInterval(() => { setCount((value) => { if (value > 1) return value - 1; return value; }); }, 1000); return () => { window.clearInterval(timer); }; }, []); return <span>{count} 秒后跳转</span>; }; const Demo = () => { const containerRef = useRef(null); return ( <List> <List.Item suffix={ <Button size="xs" onClick={() => { Toast.show({ content: '挂载在指定的 div 元素上', mountContainer: containerRef.current, }); }} > 开启 </Button> } > <div ref={containerRef}>指定挂载节点</div> </List.Item> <List.Item title="阻止背景点击" suffix={ <Button size="xs" onClick={() => { Toast.show({ content: '不可同时进行其他交互', maskClickable: false, }); }} > 开启 </Button> } /> <List.Item title="动态内容" suffix={ <Button size="xs" onClick={() => { Toast.show({ icon: 'loading', content: <Countdown count={5} />, duration: 5000, }); }} > 开启 </Button> } /> </List> ); }; ReactDOM.render(<Demo />, mountNode); ``` ## 销毁 ```jsx import { useRef } from 'react'; import { Toast, List, Button } from 'zarm'; import { Star } from '@zarm-design/icons'; const Demo = () => { const ref = React.useRef(); return ( <List> <List.Item> <Button size="xs" onClick={() => { ref.current = Toast.show({ content: '提示内容不会消失', duration: 0, }); }} > 开启 </Button> <Button size="xs" onClick={() => { ref.current?.close(); }} style={{ marginLeft: 12 }} > 关闭 </Button> <Button size="xs" onClick={() => { Toast.clear(); }} style={{ marginLeft: 12 }} > 全部清除 </Button> </List.Item> </List> ); }; ReactDOM.render(<Demo />, mountNode); ``` ## API | 属性 | 类型 | 默认值 | 说明 | | :------------- | :-------------------------------------------------- | :------------------ | :--------------------------------- | | visible | boolean | false | 是否展示 | | icon | 'success' \| 'fail' \| 'loading' \| React.ReactNode | - | 显示的图标 | | content | React.ReactNode | - | 显示的内容 | | duration | number | 2000 | 自动关闭前停留的时间(单位:毫秒) | | mask | boolean | false | 是否展示遮罩层 | | maskClassName | string | - | 遮罩层样式名 | | maskStyle | React.CSSProperties | - | 遮罩层样式 | | maskColor | string | - | 遮罩层的背景色 | | maskOpacity | string \| number | - | 遮罩层的透明度 | | maskClickable | boolean | true | 是否允许背景点击 | | onMaskClick | () => void | - | 点击遮罩层时触发的回调函数 | | onOpen | () => void | - | Toast 显示的回调函数 | | onClose | () => void | - | Toast 隐藏的回调函数 | | afterOpen | () => void | - | Toast 显示后的回调函数 | | afterClose | () => void | - | Toast 隐藏后的回调函数 | | mountContainer | MountContainer | () => document.body | 指定 Toast 挂载的 HTML 节点 | ## 指令式 API Toast 仅支持指令式调用 ### Toast.show 同时间只允许弹出一个轻提示,新出现的 Toast 会将之前正在显示中的 Toast 销毁。 show 方法的返回值为一个对象,包含以下属性: | 属性 | 类型 | 说明 | | :---- | :--------- | :--------------- | | close | () => void | 关闭当前的 Toast | ### Toast.clear 关闭所有显示中的 Toast。 ### Toast.config 设置全局配置,支持配置 `duration`、`mask`、`maskClassName`、`maskStyle`、`maskColor`、`maskOpacity`、`maskClickable` 和 `mountContainer`。配置方法如下: ```tsx Toast.config({ duration: 3000 maskColor: 'black' }); ```