This component is used inside a ScrollView or ListView to add pull to refresh functionality. When the ScrollView is at scrollY: 0, swiping down triggers an onRefresh event.

Usage example

class RefreshableList extends Component {
  constructor(props) {
    super(props);
    this.state = {
      refreshing: false,
    };
  }

  _onRefresh() {
    this.setState({refreshing: true});
    fetchData().then(() => {
      this.setState({refreshing: false});
    });
  }

  render() {
    return (
      <ListView
        refreshControl={
          <RefreshControl
            refreshing={this.state.refreshing}
            onRefresh={this._onRefresh.bind(this)}
          />
        }
        ...
      >
      ...
      </ListView>
    );
  }
  ...
}

Note: refreshing is a controlled prop, this is why it needs to be set to true in the onRefresh function otherwise the refresh indicator will stop immediatly.

Props

View props...

onRefresh function

Called when the view starts refreshing.

refreshing bool

Whether the view should be indicating an active refresh.

androidcolors [color]

The colors (at least one) that will be used to draw the refresh indicator.

androidenabled bool

Whether the pull to refresh functionality is enabled.

androidprogressBackgroundColor color

The background color of the refresh indicator.

androidprogressViewOffset number

Progress view top offset

androidsize enum(RefreshLayoutConsts.SIZE.DEFAULT, RefreshLayoutConsts.SIZE.LARGE)

Size of the refresh indicator, see RefreshControl.SIZE.

iostintColor color

The color of the refresh indicator.

iostitle string

The title displayed under the refresh indicator.

iostitleColor color

Title color.

Examples

'use strict';

const React = require('react');
const ReactNative = require('react-native');
const {
  ScrollView,
  StyleSheet,
  RefreshControl,
  Text,
  TouchableWithoutFeedback,
  View,
} = ReactNative;

const styles = StyleSheet.create({
  row: {
    borderColor: 'grey',
    borderWidth: 1,
    padding: 20,
    backgroundColor: '#3a5795',
    margin: 5,
  },
  text: {
    alignSelf: 'center',
    color: '#fff',
  },
  scrollview: {
    flex: 1,
  },
});

const Row = React.createClass({
  _onClick: function() {
    this.props.onClick(this.props.data);
  },
  render: function() {
    return (
     <TouchableWithoutFeedback onPress={this._onClick} >
        <View style={styles.row}>
          <Text style={styles.text}>
            {this.props.data.text + ' (' + this.props.data.clicks + ' clicks)'}
          </Text>
        </View>
      </TouchableWithoutFeedback>
    );
  },
});

const RefreshControlExample = React.createClass({
  statics: {
    title: '<RefreshControl>',
    description: 'Adds pull-to-refresh support to a scrollview.'
  },

  getInitialState() {
    return {
      isRefreshing: false,
      loaded: 0,
      rowData: Array.from(new Array(20)).map(
        (val, i) => ({text: 'Initial row ' + i, clicks: 0})),
    };
  },

  _onClick(row) {
    row.clicks++;
    this.setState({
      rowData: this.state.rowData,
    });
  },

  render() {
    const rows = this.state.rowData.map((row, ii) => {
      return <Row key={ii} data={row} onClick={this._onClick}/>;
    });
    return (
      <ScrollView
        style={styles.scrollview}
        refreshControl={
          <RefreshControl
            refreshing={this.state.isRefreshing}
            onRefresh={this._onRefresh}
            tintColor="#ff0000"
            title="Loading..."
            titleColor="#00ff00"
            colors={['#ff0000', '#00ff00', '#0000ff']}
            progressBackgroundColor="#ffff00"
          />
        }>
        {rows}
      </ScrollView>
    );
  },

  _onRefresh() {
    this.setState({isRefreshing: true});
    setTimeout(() => {
      // prepend 10 items
      const rowData = Array.from(new Array(10))
      .map((val, i) => ({
        text: 'Loaded row ' + (+this.state.loaded + i),
        clicks: 0,
      }))
      .concat(this.state.rowData);

      this.setState({
        loaded: this.state.loaded + 10,
        isRefreshing: false,
        rowData: rowData,
      });
    }, 5000);
  },
});

module.exports = RefreshControlExample;
RefreshControl#progressViewOffset

androidprogressViewOffset number Progress view top offset

2016-06-23 04:25:04
RefreshControl#progressBackgroundColor

androidprogressBackgroundColor color

2016-06-23 04:25:03
RefreshControl#refreshing

refreshing bool Whether the view should be indicating an active refresh.

2016-06-23 04:25:04
RefreshControl#title

iostitle string The title displayed under the refresh indicator.

2016-06-23 04:25:04
RefreshControl#enabled

androidenabled bool Whether the pull to refresh functionality is enabled

2016-06-23 04:25:03
RefreshControl#colors

androidcolors [color]

2016-06-23 04:25:03
RefreshControl#tintColor

iostintColor color

2016-06-23 04:25:04
RefreshControl#onRefresh

onRefresh function Called when the view starts refreshing.

2016-06-23 04:25:03
RefreshControl#titleColor

iostitleColor color

2016-06-23 04:25:04
RefreshControl#size

androidsize enum(RefreshLayoutConsts.SIZE.DEFAULT, RefreshLayoutConsts.SIZE.LARGE) Size

2016-06-23 04:25:04