Skeleton 骨架屏
import {
TaSkeleton,
TaGroup,
TaIcon,
TaSwitch,
SkeletonAvatarShape,
SkeletonButtonShape
} from '@/index'
import { useState } from 'react'
export default function ExpSkeleton() {
const [animated] = useState(true)
const [avatarShape] = useState<SkeletonAvatarShape>('circle')
const [buttonShape] = useState<SkeletonButtonShape>('default')
const [loading, setLoading] = useState(false)
return (
<>
<TaGroup title="基础用法">
<div className="exp-skeleton-panel">
<TaSkeleton />
</div>
</TaGroup>
<TaGroup title="显示头像">
<div className="exp-skeleton-panel">
<TaSkeleton avatar />
</div>
</TaGroup>
<TaGroup title="带动画">
<div className="exp-skeleton-panel">
<TaSkeleton avatar animated={animated} avatarShape={avatarShape} />
</div>
</TaGroup>
<TaGroup title="显示子组件">
<div className="exp-skeleton-panel">
<div className="exp-skeleton-switch">
<TaSwitch value={loading} onChange={setLoading} />
</div>
<TaSkeleton avatar loading={!loading}>
<div className="exp-skeleton-sub-component">
<TaIcon icon="HeartFilled" size="32" />
<h4 className="title">hello World</h4>
<p className="paragraph">简单不先于复杂,而是在复杂之后。</p>
</div>
</TaSkeleton>
</div>
</TaGroup>
<TaGroup title="自由组合">
<div className="exp-skeleton-panel">
<TaSkeleton
className="exp-skeleton-custom"
buttonShape={buttonShape}
renderLayout={() => (
<>
<TaSkeleton.Image />
<TaSkeleton.Title />
<TaSkeleton.Paragraph row={2} />
<TaSkeleton.Button />
</>
)}
></TaSkeleton>
</div>
</TaGroup>
</>
)
}
Import
import { TaSkeleton } from 'tantalum-ui-mobile-react'
如果想要自定义布局,可以再引入子组件:
import {
SkeletonAvatar,
SkeletonImage,
SkeletonTitle,
SkeletonParagraph,
SkeletonButton
} from 'tantalum-ui-mobile-react'
具体的引入方式可以参考引入组件。
Import Type
组件导出的类型定义:
import type {
SkeletonAvatarShape,
SkeletonButtonShape
} from 'tantalum-ui-mobile-react'
Skeleton Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
loading | boolean | true | 否 | 是否显示骨架屏,传 false 时会展示子组件内容 |
avatar | boolean | false | 否 | 是否显示头像占位图 |
animated | boolean | false | 否 | 是否开启动画 |
avatarShape | SkeletonAvatarShape | 'default' | 否 | 可选 'default', 'circle' |
buttonShape | SkeletonButtonShape | 'default' | 否 | 可选 'default', 'round' |
paragraphRow | number | 3 | 否 | 段落占位图行数 |
Skeleton Slots
children
<TaSkeleton avatar loading={loading}>
<div className="exp-skeleton-sub-component">
<TaIcon icon="HeartFilled" size="32" />
<h4 className="title">hello World</h4>
<p className="paragraph">简单不先于复杂,而是在复杂之后。</p>
</div>
</TaSkeleton>
骨架屏重新布局(renderLayout)
还可以通过 renderLayout
重新组合骨架屏,目前提供 SkeletonAvatar、SkeletonImage、SkeletonTitle、SkeletonParagraph、SkeletonButton 5 款子组件。
<TaSkeleton
className="exp-skeleton-custom"
buttonShape={buttonShape}
renderLayout={() => (
<>
<TaSkeleton.Image />
<TaSkeleton.Title />
<TaSkeleton.Paragraph row={2} />
<TaSkeleton.Button />
</>
)}
></TaSkeleton>
SkeletonAvatar Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
shape | SkeletonAvatarShape | 'default' | 否 | 可选 'default', 'circle' |
animated | boolean | false | 否 | 是否开启动画,仅在单独使用头像骨架时生效 |
SkeletonImage Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
animated | boolean | false | 否 | 是否开启动画,仅在单独使用头像骨架时生效 |
SkeletonTitle Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
animated | boolean | false | 否 | 是否开启动画,仅在单独使用头像骨架时生效 |
SkeletonParagraph Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
row | number | 3 | 否 | 段落占位图行数 |
animated | boolean | false | 否 | 是否开启动画,仅在单独使用头像骨架时生效 |
属性 | 类型 | 默认值 | 必填 | 说明 |
---|
shape | SkeletonButtonShape | 'default' | 否 | 可选 'default', 'round' |
animated | boolean | false | 否 | 是否开启动画,仅在单独使用头像骨架时生效 |