@skele/components
Version:
Skele custom components for React and React Native.
101 lines (77 loc) • 3.21 kB
Markdown
# Skele Components
Skele's `components` package is a library of custom components that aid in building React and React Native apps.
## Available Components
### Viewport Tracker
Tracks the position and size of a `ScrollView`, `FlatList` or `SectionList` viewport.
Communicates it to all viewport aware child components.
#### Usage
```javascript
import { Viewport } from '@skele/components'
render() {
return (
<Viewport.Tracker>
<ScrollView scrollEventThrottle={16}>
{ this.props.children }
</ScrollView>
</Viewport.Tracker>
)
}
```
### Viewport Aware
A higher-order component that processes the information communicated by the viewport tracker.
Determines whether the wrapped component is in or outside the viewport.
Updates the `inViewport` property of the wrapped component accordingly.
Invokes `onViewportEnter` and `onViewportLeave` when the component enters or leaves the viewport.
Note that handling updates of `inViewport` is the preferred way of reacting to visibility changes.
#### Usage
```javascript
import { Image } from 'react-native'
import { Viewport } from '@skele/components'
const ViewportAwareImage = Viewport.Aware(Image)
render() {
return (
<ViewportAwareImage
source={{ uri: 'https://facebook.github.io/react-native/img/header_logo.png' }}
preTriggerRatio={0.5}
onViewportEnter={() => console.log('Entered!')}
onViewportLeave={() => console.log('Left!')}
innerRef={ref => (this._ref = ref)} />
)
}
```
#### Properties
| Prop | Description | Default |
|---|---|---|
|**`preTriggerRatio`**| Determines pre-triggering of `inViewport`. Useful for rendering components beforehand to improve user experience. A ratio of `0.5` means that the effective viewport will be twice the size of the real viewport. | `0` |
|**`onViewportEnter`**| Invoked when the component enters the viewport. | `null` |
|**`onViewportLeave`**| Invoked when the component leaves the viewport. | `null` |
|**`innerRef`**| Allows access to the reference of the wrapped component. | `null` |
### With Placeholder
A higher-order component that can be used to display a placeholder while the wrapped component is not in the viewport.
This can improve user experience since it can serve as a mechanism for lazy loading.
#### Usage
```javascript
import { Image, View } from 'react-native'
import { Viewport } from '@skele/components'
const Placeholder = () =>
<View style={{ width: 50, height: 50, backgroundColor: 'darkgrey' }} />
const VAImgWithPlaceholder =
Viewport.Aware(
Viewport.WithPlaceholder(Image, Placeholder)
)
render() {
return (
<VAImgWithPlaceholder
// placeholder={Placeholder} // passing down a placeholder at render time
source={{ uri: 'https://facebook.github.io/react-native/img/header_logo.png' }}
preTriggerRatio={0.5}
retainOnceInViewport={true}
style={{ width: 50, height: 50 }} />
)
}
```
#### Properties
| Prop | Description | Default |
|---|---|---|
|**`placeholder`**| Useful for passing down a placeholder at render time. | `null` |
|**`retainOnceInViewport`**| Whether to keep the wrapped component displayed once it enters the viewport. | `false` |