Migration guide

From hand-authored skeleton libraries to @kenildev007/skeleto.

From react-loading-skeleton

Before:

import Skeleton from 'react-loading-skeleton';
import 'react-loading-skeleton/dist/skeleton.css';

function UserCard({ user, loading }) {
  if (loading) {
    return (
      <div className="card">
        <Skeleton circle width={64} height={64} />
        <Skeleton width={200} height={20} />
        <Skeleton width={300} height={14} count={2} />
      </div>
    );
  }
  return <RealUserCard user={user} />;
}

After:

import { AutoSkeleton } from '@kenildev007/skeleto';
import '@kenildev007/skeleto/styles.css';

function UserCard({ user, loading }) {
  return (
    <AutoSkeleton loading={loading}>
      <RealUserCard user={user} />
    </AutoSkeleton>
  );
}

That's the whole migration. You delete the parallel skeleton tree and let the library infer it. If a specific shape is wrong, use the data-skeleton-role escape hatch.

From react-native-skeleton-placeholder

Before:

import SkeletonPlaceholder from 'react-native-skeleton-placeholder';

function UserCard({ user, loading }) {
  if (loading) {
    return (
      <SkeletonPlaceholder>
        <SkeletonPlaceholder.Item flexDirection="row" alignItems="center">
          <SkeletonPlaceholder.Item width={64} height={64} borderRadius={32} />
          <SkeletonPlaceholder.Item marginLeft={20}>
            <SkeletonPlaceholder.Item width={120} height={20} />
            <SkeletonPlaceholder.Item marginTop={6} width={200} height={14} />
          </SkeletonPlaceholder.Item>
        </SkeletonPlaceholder.Item>
      </SkeletonPlaceholder>
    );
  }
  return <RealUserCard user={user} />;
}

After:

import { AutoSkeleton } from '@kenildev007/skeleto';

function UserCard({ user, loading }) {
  return (
    <AutoSkeleton loading={loading}>
      <RealUserCard user={user} />
    </AutoSkeleton>
  );
}

Map of common props

react-loading-skeletonSkeleto
baseColorbaseColor (or via SkeletonProvider)
highlightColorhighlightColor
durationspeed (seconds)
circleauto-detected; or data-skeleton-role='circle'
countjust render N children - they're auto-measured
enableAnimation={false}animation='none'