UNPKG

zarm

Version:

基于 React 的移动端UI库

227 lines (193 loc) 6.79 kB
# Icon 图标 ## 基本用法 ```jsx import { Grid, Icon } from 'zarm'; const MyIcon = Icon.createFromIconfont('//lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_20337_14.627ee457cf7594fbbce6d5e14b8c29ef.js'); // generated by iconfont.cn ReactDOM.render( <Grid square> <Grid.Item> <div className="block"> <MyIcon type="home" theme="primary" /> <span>home</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="user" theme="primary" /> <span>user</span> </div> </Grid.Item> </Grid>, mountNode, ); ``` ## 图标主题 ```jsx import { Grid, Icon } from 'zarm'; const MyIcon = Icon.createFromIconfont('//lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_20337_14.627ee457cf7594fbbce6d5e14b8c29ef.js'); ReactDOM.render( <Grid square> <Grid.Item> <div className="block"> <MyIcon type="home" theme="warning" /> <span>warning</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="home" theme="danger" /> <span>danger</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="home" style={{ color: '#1890ff' }} /> <span>custom color</span> </div> </Grid.Item> </Grid>, mountNode, ); ``` ## 图标尺寸 ```jsx import { Grid, Icon } from 'zarm'; const MyIcon = Icon.createFromIconfont('//lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_20337_14.627ee457cf7594fbbce6d5e14b8c29ef.js'); ReactDOM.render( <Grid square> <Grid.Item> <div className="block"> <MyIcon type="home" theme="primary" size="sm" /> <span>sm</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="home" theme="primary" /> <span>md</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="home" theme="primary" size="lg" /> <span>lg</span> </div> </Grid.Item> </Grid>, mountNode, ); ``` ## @zarm-design/icons 自带图标 ```jsx import { useState } from 'react'; import { Grid, List, Radio } from 'zarm'; import Icons from '@zarm-design/icons'; function Demo() { const [mode, setMode] = useState('svg'); return ( <> <List> <List.Item title="模式" suffix={ <Radio.Group compact type="button" onChange={setMode} value={mode}> <Radio value="svg">svg</Radio> <Radio value="font">font</Radio> </Radio.Group> } /> </List> <Grid square> {Object.keys(Icons).map((item, index) => { if (['Icon', 'Empty', 'IconProvider'].includes(item)) return; return ( <Grid.Item key={+index}> <div className="block"> {React.createElement(Icons[item], { key: +index, theme: 'primary', mode, })} <span>{item}</span> </div> </Grid.Item> ); })} </Grid> </> ); } ReactDOM.render(<Demo />, mountNode); ``` ## 自定义 Iconfont 图标 我们提供了一个 createFromIconfont 方法,方便开发者调用在 <a href="https://www.iconfont.cn" target="_blank">iconfont.cn</a><a href="https://iconpark.oceanengine.com" target="_blank">iconpark</a> 等平台上自行管理的图标。 其本质上是组件在渲染前会自动引入项目中的图标符号集,并且创建了一个 `<use>` 标签来渲染图标的组件。 ```jsx import { Grid, Icon } from 'zarm'; const MyIcon = Icon.createFromIconfont('//lf1-cdn-tos.bytegoofy.com/obj/iconpark/svg_20337_14.627ee457cf7594fbbce6d5e14b8c29ef.js'); ReactDOM.render( <Grid square> <Grid.Item> <div className="block"> <MyIcon type="home" theme="primary" /> <span>home</span> </div> </Grid.Item> <Grid.Item> <div className="block"> <MyIcon type="user" theme="primary" /> <span>user</span> </div> </Grid.Item> </Grid>, mountNode, ); ``` ## 自定义 SVG 图标 可以通过配置 <a href="https://github.com/smooth-code/svgr" target="_blank">svgr</a> 来将 svg 图标作为 React 组件导入。 本示例以 webpack 为参考,使用 <a href="https://www.npmjs.com/package/@svgr/webpack" target="_blank">@svgr/webpack</a> 来实现,其他实现方式请参阅 <a href="https://www.smooth-code.com/open-source/svgr/docs/getting-started/" target="_blank">svgr 文档</a> ```js // webpack.config.js { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, issuer: { test: /\.jsx?$/, }, use: [ { loader: 'babel-loader', }, { loader: '@svgr/webpack', options: { babel: false, icon: true, }, }, ], }, ``` ```jsx import { Icon } from 'zarm'; import { ReactComponent as YourSvg } from 'path/to/yourSvg.svg'; // path to your '*.svg' file. ReactDOM.render(<Icon component={YourSvg} />, mountNode); ``` ### 使用 `font` 模式 需要手动引入样式文件 ``` @import "@zarm-design/icons/style/font"; ``` ## API | 属性 | 类型 | 默认值 | 说明 | | :-------- | :------------------------------------------------------------- | :---------- | :---------------------------------------------------------------- | | theme | string | 'default' | 主题,可选值 `default`、`primary`、`success`、`warning`、`danger` | | size | string | - | 大小,可选值 `sm`、`lg` | | type | string | - | 图标类型,可选项为来源 iconfont 的图标名称 | | mode | string | 'svg' | 模式,可选值 `svg`、`font` 自带 icon 可选 | | component | React.ComponentType&lt;React.SVGProps&lt;SVGSVGElement&gt;&gt; | - | 本地 svg 文件,需配合 viewBox 使用 | | viewBox | string | '0 0 32 32' | 自定义 SVG 图标时,用来设置画布的起始坐标及大小 | ## CSS 变量 | 属性 | 默认值 | 说明 | | :---------- | :--------------------- | :------- | | --font-size | '24px' | 图标大小 | | --color | 'var(--za-color-text)' | 图标颜色 |