在项目开发中使用 ant design 组件的注意事项
- Published on
在项目开发中使用组件库是很普遍的需求,我平时最常用的组件库是 ant design。在此记录使用 ant design 组件需要注意的细节和遇到的问题,以及相应的解决方案。
ColorPicker 颜色选择器
提供颜色选取的组件,自 5.5.0 版本开始提供该组件。
import { useState } from 'react'
import { Button, ColorPicker, Space, Tooltip } from 'antd'
export default function ColorPickerDemo() {
const [color, setColor] = useState('')
const [disabledAlphaColor, setDisabledAlphaColor] = useState('')
return (
<Space direction="vertical">
<Space>
<Tooltip title="启用透明度">
<ColorPicker value={color} onChange={(value) => setColor(value.toHexString())} />
</Tooltip>
<Button>{color}</Button>
</Space>
<Space>
<Tooltip title="禁用透明度">
<ColorPicker
value={disabledAlphaColor}
disabledAlpha
onChange={(value) => setDisabledAlphaColor(value.toHexString())}
/>
</Tooltip>
<Button>{disabledAlphaColor}</Button>
</Space>
</Space>
)
}
ColorPicker 默认带有透明度选项(toHexString()后为八值十六进制字符),但在有些情况下透明度可能不被支持,因此可以设置 disabledAlpha
属性禁用透明度。
Tooltip 文字提示
简单的文字提示气泡框。
import React, { useRef } from 'react'
import { Button, Space, Tooltip } from 'antd'
export default function TooltipDemo() {
const fullScreenRef = useRef(null)
const handleFullScreen = () => {
fullScreenRef.current?.requestFullscreen()
}
return (
<Space>
<Button type="primary" onClick={handleFullScreen}>
全屏
</Button>
<Space ref={fullScreenRef} className="flex items-center justify-center">
<Tooltip title="渲染到body上">
<Button>鼠标移入</Button>
</Tooltip>
<Tooltip
title="渲染到指定元素上"
getPopupContainer={() => fullScreenRef.current ?? document.body}
>
<Button>鼠标移入</Button>
</Tooltip>
</Space>
</Space>
)
}
大多数情况下 Tooltip 的显示效果都没问题,但开发中遇到当父元素进入全屏状态时,Tooltip 就无法正常显示(Popconfirm、Popover 同理)。
问题原因:Tooltip 默认渲染到 body 上,当元素全屏时将被遮挡。
解决办法:设置 getPopupContainer
属性,将浮层渲染到父元素。
样式与 TailwindCSS 优先级冲突
Ant Design 的 CSS-in-JS 默认通过 :where 选择器降低 CSS Selector 优先级,以减少用户升级时额外调整自定义样式的成本,不过 :where 语法的兼容性在低版本浏览器比较差。
在某些场景下你如果需要支持旧版浏览器(或者如 TailwindCSS 优先级冲突),你可以使用 @ant-design/cssinjs 取消默认的降权操作(请注意版本保持与 antd 一致):
import { StyleProvider } from '@ant-design/cssinjs'
// `hashPriority` 默认为 `low`,配置为 `high` 后,
// 会移除 `:where` 选择器封装
export default () => (
<StyleProvider hashPriority="high">
<MyApp />
</StyleProvider>
)
切换后,样式将从 :where 切换为类选择器:
-- :where(.css-bAMboO).ant-btn {
color: #fff;
}
++.css-bAMboO.ant-btn {
color: #fff;
}