跳转到内容

SizeProvider

向子组件传递组件尺寸的上下文提供者。被 Button 等组件内部使用,用于将其尺寸传递给嵌套的图标。

import { SizeProvider, useSize } from 'asterui'

当使用带有 icon 属性的 Button 等组件时,尺寸会自动传递给图标:

import { Button } from 'asterui'
import { StarIcon } from '@aster-ui/icons'
function App() {
return (
<Button size="lg" icon={<StarIcon />}>
大按钮
</Button>
)
}

StarIcon 将自动从 Button 接收 lg 尺寸。

使用 SizeProvider 创建可以将尺寸传递给子组件的自定义组件:

import { SizeProvider, useSize } from 'asterui'
function CustomIconButton({ size = 'md', icon, children }) {
return (
<SizeProvider size={size}>
<button className="custom-button">
{icon}
{children}
</button>
</SizeProvider>
)
}

使用 useSize hook 访问当前的尺寸上下文:

import { useSize } from 'asterui'
const sizeMap = {
xs: 12,
sm: 16,
md: 20,
lg: 24,
xl: 28,
}
function CustomIcon() {
const size = useSize() ?? 'md'
const pixels = sizeMap[size]
return (
<svg width={pixels} height={pixels} viewBox="0 0 24 24">
{/* ... */}
</svg>
)
}
属性类型描述
size'xs' | 'sm' | 'md' | 'lg' | 'xl'提供给子组件的尺寸。
childrenReact.ReactNode可以消费尺寸上下文的子组件。
返回类型描述
sizeSize | undefined最近 SizeProvider 的当前尺寸,如果不在提供者内则为 undefined
尺寸典型像素值
xs12px
sm16px
md20px
lg24px
xl28px

以下组件在内部使用 SizeProvider 来传递其尺寸:

  • Button:将尺寸传递给 icon 属性
  • CopyButton:将尺寸传递给内置图标

@aster-ui/icons 包设计为与 SizeProvider 无缝配合:

import { Button } from 'asterui'
import { HeartIcon, StarIcon } from '@aster-ui/icons'
function App() {
return (
<>
<Button size="sm" icon={<HeartIcon />}></Button>
<Button size="lg" icon={<StarIcon />}></Button>
</>
)
}

图标会根据父组件的尺寸自动调整大小,无需显式配置。