Skip to content

expo/react-native-scrollable-decorator

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

react-native-scrollable-decorator Slack

The @scrollable decorator lets your scrollable React Native components conform to a standard interface, making it easier to compose components. This lets you compose different types of ScrollView-like components while preserving the ScrollView API, including methods like scrollTo.

See ScrollableMixin for the mixin version of this decorator.

npm package

Installation

npm install react-native-scrollable-decorator

Usage

Decorate your scrollable React components with @scrollable and implement getScrollResponder(), which must return the underlying scrollable component's scroll responder.

let scrollable = require('react-native-scrollable-decorator');

@scrollable
class InfiniteScrollView extends React.Component {

  static propTypes = {
    ...ScrollView.propTypes,
    renderScrollComponent: React.PropTypes.func.isRequired,
  };

  /**
   * IMPORTANT: You must return the scroll responder of the underlying
   * scrollable component from getScrollResponder() when using @scrollable.
   */
  getScrollResponder() {
    return this._scrollView.getScrollResponder();
  },

  setNativeProps(nativeProps) {
    this._scrollView.setNativeProps(nativeProps);
  },

  render() {
    var {
      renderScrollComponent,
      ...props
    } = this.props;
    return React.cloneElement(renderScrollComponent(props), {
      ref: component => {
        this._scrollView = component;
      },
    });
  },
});

Features

By decorating your custom component with @scrollable, your component gets the ScrollView API. For example:

class App extends React.Component {
  render() {
    return (
      <ListView
        ref={component => { this._scrollView = component; }}
        renderScrollComponent={props => <InfiniteScrollView {...props} />}
        dataSource={...}
        renderRow={...}
      />
    );
  }

  _scrollToTop() {
    // By having all scrollable components conform to the scrollable standard,
    // calling `scrollTo` on your top-level scrollable component will
    // successfully scroll the underlying scroll view.
    this._scrollView.scrollTo(0, 0);
  }
}

About

A standard interface for your scrollable React Native components, making it easier to compose components.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published