1.1.3 • Published 3 years ago

expo-skeleton-loader v1.1.3

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Expo Skeleton Loader

A simple component to show skeleton loading animation. Works in almost all platforms.

Preview

Platform Compatibility

Android DeviceAndroid EmulatorIOS DeviceIOS EmulatorWeb

Installation

This project using react-native-reanimated. Please install this package as well.

Using yarn:

yarn add expo-skeleton-loader

Using npm:

npm i expo-skeleton-loader

Usage

Expo Skeleton Loader takes it's children to figure out layout using SkeletonLoader.Container and SkeletonLoader.Item

import React from "react";
import { StyleSheet, View, Dimensions, ViewStyle } from "react-native";
import SkeletonLoader from "expo-skeleton-loader";

const { width, height } = Dimensions.get("window");

const AvatarLayout = ({
  size = 100,
  style,
}: {
  size?: number,
  style?: ViewStyle,
}) => (
  <SkeletonLoader>
    <SkeletonLoader.Container
      style={[{ flex: 1, flexDirection: "row" }, style]}
    >
      <SkeletonLoader.Item
        style={{
          width: size,
          height: size,
          borderRadius: size / 2,
          marginRight: 20,
        }}
      />
      <SkeletonLoader.Container style={{ paddingVertical: 10 }}>
        <SkeletonLoader.Item
          style={{ width: 220, height: 20, marginBottom: 5 }}
        />
        <SkeletonLoader.Item style={{ width: 150, height: 20 }} />
      </SkeletonLoader.Container>
    </SkeletonLoader.Container>
  </SkeletonLoader>
);

const PostLayout = () => (
  <SkeletonLoader style={{ marginVertical: 10 }}>
    <AvatarLayout style={{ marginBottom: 10 }} />

    <SkeletonLoader.Item
      style={{ width, height: height / 3.5, marginVertical: 10 }}
    />
  </SkeletonLoader>
);

const numberOfPosts = new Array(2).fill(null);

export default function App() {
  return (
    <View style={styles.container}>
      {numberOfPosts.map((_, i) => (
        <PostLayout key={i} />
      ))}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "black",
    padding: 10,
  },
});

Props

SkeletonLoader

PropDescriptionTypeDefault
durationAnimation speed in millisecondsnumber500
boneColorThe background color of placeholderstring#121212
highlightColorThe highlight color of placeholderstring#333333
styleThe style of component (View Style)ViewStylenull

SkeletonLoader.Container

You can use any props of View component.

PropDescriptionTypeDefault
styleThe style of component (View Style)ViewStylenull

SkeletonLoader.Item

⚠️ Warning: The style must includes height and weight in order to works

You can use any props of View component.

PropDescriptionTypeDefault
styleThe style of component (View Style)ViewStylenull
1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago