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

属性类型默认值必填说明
loadingbooleantrue是否显示骨架屏,传 false 时会展示子组件内容
avatarbooleanfalse是否显示头像占位图
animatedbooleanfalse是否开启动画
avatarShapeSkeletonAvatarShape'default'可选 'default', 'circle'
buttonShapeSkeletonButtonShape'default'可选 'default', 'round'
paragraphRownumber3段落占位图行数

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 重新组合骨架屏,目前提供 SkeletonAvatarSkeletonImageSkeletonTitleSkeletonParagraphSkeletonButton 5 款子组件。

<TaSkeleton
  className="exp-skeleton-custom"
  buttonShape={buttonShape}
  renderLayout={() => (
    <>
      <TaSkeleton.Image />
      <TaSkeleton.Title />
      <TaSkeleton.Paragraph row={2} />
      <TaSkeleton.Button />
    </>
  )}
></TaSkeleton>

SkeletonAvatar Props

属性类型默认值必填说明
shapeSkeletonAvatarShape'default'可选 'default', 'circle'
animatedbooleanfalse是否开启动画,仅在单独使用头像骨架时生效

SkeletonImage Props

属性类型默认值必填说明
animatedbooleanfalse是否开启动画,仅在单独使用头像骨架时生效

SkeletonTitle Props

属性类型默认值必填说明
animatedbooleanfalse是否开启动画,仅在单独使用头像骨架时生效

SkeletonParagraph Props

属性类型默认值必填说明
rownumber3段落占位图行数
animatedbooleanfalse是否开启动画,仅在单独使用头像骨架时生效

SkeletonButton Props

属性类型默认值必填说明
shapeSkeletonButtonShape'default'可选 'default', 'round'
animatedbooleanfalse是否开启动画,仅在单独使用头像骨架时生效