Skeleton 骨架屏

在需要等待加载内容的位置提供一个占位图形组合。

何时使用

  • 网络较慢,需要长时间等待加载处理的情况下。
  • 图文信息内容较多的列表/卡片中。
  • 只在第一次加载数据的时候使用。
  • 可以被 Spin 完全代替,但是在可用的场景下可以比 Spin 提供更好的视觉效果和用户体验。

代码演示

基本

最简单的占位效果

Skeleton骨架屏 - 图1

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Skeleton } from 'choerodon-ui';
  4. ReactDOM.render(<Skeleton />, document.getElementById('container'));

复杂的组合

更复杂的组合

Skeleton骨架屏 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Skeleton } from 'choerodon-ui';
  4. ReactDOM.render(<Skeleton avatar paragraph={{ rows: 4 }} />, document.getElementById('container'));

动画效果

显示动画效果

Skeleton骨架屏 - 图3

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Skeleton } from 'choerodon-ui';
  4. ReactDOM.render(<Skeleton active />, document.getElementById('container'));

骨架按钮、头像和输入框

骨架按钮、头像和输入框

Skeleton骨架屏 - 图4

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Skeleton, Switch, Form, Radio } from 'choerodon-ui';
  4. class Demo extends React.Component {
  5. state = {
  6. buttonActive: false,
  7. avatarActive: false,
  8. inputActive: false,
  9. buttonSize: 'default',
  10. avatarSize: 'default',
  11. inputSize: 'default',
  12. buttonShape: 'default',
  13. avatarShape: 'circle',
  14. };
  15. handleActiveChange = prop => checked => {
  16. this.setState({ [prop]: checked });
  17. };
  18. handleSizeChange = prop => e => {
  19. this.setState({ [prop]: e.target.value });
  20. };
  21. handleShapeChange = prop => e => {
  22. this.setState({ [prop]: e.target.value });
  23. };
  24. render() {
  25. const {
  26. buttonActive,
  27. avatarActive,
  28. inputActive,
  29. buttonSize,
  30. avatarSize,
  31. inputSize,
  32. buttonShape,
  33. avatarShape,
  34. } = this.state;
  35. return (
  36. <div>
  37. <div>

包含子组件

加载占位图包含子组件

Skeleton骨架屏 - 图5

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Skeleton, Button } from 'choerodon-ui';
  4. class Demo extends React.Component {
  5. state = {
  6. loading: false,
  7. };
  8. showSkeleton = () => {
  9. this.setState({ loading: true });
  10. setTimeout(() => {
  11. this.setState({ loading: false });
  12. }, 3000);
  13. };
  14. render() {
  15. return (
  16. <div className="article">
  17. <Skeleton loading={this.state.loading}>
  18. <div>
  19. <h4>Choerodon UI of React</h4>
  20. <p>
  21. Following the Ant Design specification, we developed a React UI library Choerodon UI that contains a set of high quality components and demos for building rich, interactive user interfaces.
  22. </p>
  23. </div>
  24. </Skeleton>
  25. <Button onClick={this.showSkeleton} disabled={this.state.loading}>
  26. Show Skeleton
  27. </Button>
  28. </div>
  29. );
  30. }
  31. }

API

Skeleton

属性说明类型默认值
active是否展示动画效果booleanfalse
avatar是否显示头像占位图boolean | SkeletonAvatarPropsfalse
loadingtrue 时,显示占位图。反之则直接展示子组件boolean-
paragraph是否显示段落占位图boolean | SkeletonParagraphPropstrue
title是否显示标题占位图boolean | SkeletonTitlePropstrue

SkeletonAvatarProps

属性说明类型默认值
active是否展示动画效果,仅在单独使用头像骨架时生效booleanfalse
size设置头像占位图的大小number | large | small | default-
shape指定头像的形状circle | square-

SkeletonTitleProps

属性说明类型默认值
width设置标题占位图的宽度number | string-

SkeletonParagraphProps

属性说明类型默认值
rows设置段落占位图的行数number-
width设置段落占位图的宽度,若为数组时则为对应的每行宽度,反之则是最后一行的宽度number | string | Array<number | string>-

SkeletonButtonProps

属性说明类型默认值
active是否展示动画效果booleanfalse
size设置按钮的大小large | small | default-
shape指定按钮的形状circle | round | default-

SkeletonInputProps

属性说明类型默认值
active是否展示动画效果booleanfalse
size设置按钮的大小large | small | default-