0.8.0 • Published 5 days ago

react-native-lazy-scrollview v0.8.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 days ago

CI

Motivation

To provide an easy way to trigger logic when a child (or nested child) of a ScrollView passes a threshold scroll value. This is useful when you have a screen with dynamic content that you don't want to unmount when it scrolls offscreen, but also would like to lazy load. Also provides ability to trigger additional logic when a percentage of your component is visible in the ScrollView.

⚠️ Limitations

Currently only supports vertical ScrollView.

Installation

yarn add react-native-lazy-scrollview

This library requires reanimated. Follow their installation instructions.

Usage

// MyCoolHomeScreen.tsx
import { LazyScrollView } from 'react-native-lazy-scrollview';
import { CoolComponentA, CoolComponentB, CoolComponentC } from './components';

export function MyCoolHomeScreen() {
  return (
    // Trigger onThresholdReached when child is 100 pixels above the bottom
    <LazyScrollView offset={-100} showsVerticalScrollIndicator={false}>
      <CoolComponentA />
      <CoolComponentB />
      <CoolComponentC />
    </LazyScrollView>
  );
}

// CoolComponentC.tsx
import { View } from 'react-native';
import { LazyChild } from 'react-native-lazy-scrollview';
import { ContentView, SkeletonLoader } from './components';

export function CoolComponentC() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  const onThresholdPass = async () => {
    try {
      const fetchedData = await someExpensiveApiCall();
      setData(fetchedData);
      setLoading(false);
    } catch (e) {
      setLoading(false);
    }
  };

  const onPercentVisibleThresholdPass = async () => {
    analyticsCall();
  };

  if (!data) {
    return null;
  }

  return (
    <LazyChild
      onThresholdPass={onThresholdPass}
      onPercentVisibleThresholdPass={onPercentVisibleThresholdPass}
      percentVisibleThreshold={0.75}
    >
      {loading ? <SkeletonLoader /> : <ContentView data={data} />}
    </LazyChild>
  );
}

API

LazyScrollView | Prop | Type | Optional | Default | Description | | --- | --- | --- | --- | --- | | offset | number | Yes | 0 (bottom of ScrollView) | How far above or below the bottom of the ScrollView the threshold trigger is. Negative is above, positive it below.

LazyChild | Prop | Type | Optional | Default | Description | | --- | --- | --- | --- | --- | | onThresholdPass | function | No | - | Callback that will fire when top of View passes threshold trigger. | percentVisibleThreshold | number (Unit Interval) | Yes | - | Percentage of LazyChild that will trigger onPercentVisibleThresholdPass. | onPercentVisibleThresholdPass | function | Yes | - | Callback that will fire when percentVisibleThreshold is visible above bottom of LazyScrollView.

Example

To run the example app, clone the repo

cd example
yarn install

yarn ios
# or
yarn android

License

MIT


Made with create-react-native-library

0.8.0

5 days ago

0.7.1

7 days ago

0.7.0

7 days ago

0.6.0

1 year ago

0.5.0

1 year ago

0.4.0

1 year ago

0.3.0

1 year ago

0.2.0

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago