# react-native-rk-pull-to-refresh
**Repository Path**: zfWebSies/react-native-rk-pull-to-refresh
## Basic Information
- **Project Name**: react-native-rk-pull-to-refresh
- **Description**: a pull to refresh component for react-native, same api on both android and ios
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-02-21
- **Last Updated**: 2021-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# react-native-rk-pull-to-refresh(ios/android)
[中文说明](https://github.com/hzl123456/react-native-rk-pull-to-refresh/blob/master/README-ZH.md)
A pull to refresh component for react-native, same api on both android and ios.Also you can design you owner pull style for this component.You can use it for most of the component in react-native such as View,Scrollview,Listview and Flatlist.
## Preview


## Installation
npm install react-native-rk-pull-to-refresh --save
react-native link react-native-rk-pull-to-refresh
## How to use
It contains PullView,PullScrollView,PullListView and PullFlatList.If you want to use PullFlatList,you should use this component whith React Native 0.43 and newer.
### Use it for Listview with default style
```
import React, {PureComponent} from 'react';
import {ListView, View, Text, Dimensions} from 'react-native';
import {PullListView} from 'react-native-rk-pull-to-refresh'
const width = Dimensions.get('window').width
export default class PullListViewDemo extends PureComponent {
constructor(props) {
super(props);
this.dataSource =
new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}).cloneWithRows(this.getDataSource())
}
getDataSource = () => {
let array = new Array();
for (let i = 0; i < 50; i++) {
array.push(`ListViewItem:${i + 1}`);
}
return array;
}
render() {
return (
this.pull = c}
isContentScroll={true}
style={{flex: 1, width: width}}
onPushing={this.props.onPushing}
onPullRelease={this._onPullRelease}
dataSource={this.dataSource}
renderRow={this._renderRow}/>
)
}
_onPullRelease = () => {
setTimeout(() => {
this.pull && this.pull.finishRefresh()
}, 2000)
}
_renderRow = (rowData) => {
return (
{rowData}
);
}
componentDidMount() {
this.pull && this.pull.startRefresh()
}
}
```
### Use it for View with you owner style
```
import React, {PureComponent} from 'react';
import {View, Text, Dimensions, StyleSheet, ActivityIndicator} from 'react-native';
import {PullView} from 'react-native-rk-pull-to-refresh'
const width = Dimensions.get('window').width
const topIndicatorHeight = 50
export default class PullViewDemo extends PureComponent {
render() {
return (
this.pull = c}
style={{flex: 1, width: width}}
topIndicatorRender={this.topIndicatorRender}
topIndicatorHeight={topIndicatorHeight}
onPullStateChangeHeight={this.onPullStateChangeHeight}
onPushing={this.props.onPushing}
onPullRelease={this._onPullRelease}>
这是内容
)
}
onPullStateChangeHeight = (pullState, moveHeight) => {
if (pullState == 'pulling') {
this.txtPulling && this.txtPulling.setNativeProps({style: styles.show});
this.txtPullok && this.txtPullok.setNativeProps({style: styles.hide});
this.txtPullrelease && this.txtPullrelease.setNativeProps({style: styles.hide});
} else if (pullState == 'pullok') {
this.txtPulling && this.txtPulling.setNativeProps({style: styles.hide});
this.txtPullok && this.txtPullok.setNativeProps({style: styles.show});
this.txtPullrelease && this.txtPullrelease.setNativeProps({style: styles.hide});
} else if (pullState == 'pullrelease') {
this.txtPulling && this.txtPulling.setNativeProps({style: styles.hide});
this.txtPullok && this.txtPullok.setNativeProps({style: styles.hide});
this.txtPullrelease && this.txtPullrelease.setNativeProps({style: styles.show});
}
}
topIndicatorRender = () => {
return (
this.txtPulling = c} style={styles.hide}>pulling...
this.txtPullok = c} style={styles.hide}>pullok...
this.txtPullrelease = c} style={styles.hide}>pullrelease...
);
}
_onPullRelease = () => {
setTimeout(() => {
this.pull && this.pull.finishRefresh()
}, 2000)
}
componentDidMount() {
this.pull && this.pull.startRefresh()
}
}
const styles = StyleSheet.create({
hide: {
position: 'absolute',
left: 10000,
backgroundColor: 'transparent'
},
show: {
position: 'relative',
left: 0,
backgroundColor: 'transparent'
}
});
```
## Full Demo
clone or download PullToRefreshDemo
## Props
Porp|Type|Optional|Default|Description
---- | ---- | ------- | ------- | ------------
refreshable | bool | yes | true |can pull to refresh or not
isContentScroll | bool | yes |false|content scroll when pulling
onPullRelease | func |yes | | when refreshing, this function will be called
topIndicatorRender |func |yes | |top pulling render for this component,when the value is undefined,this component use default top pulling render
topIndicatorHeight |number |yes | |top pulling render header,when topIndicatorRender is not undefined,you must set the correct topIndicatorHeight
onPullStateChangeHeight |func|yes| |when pulling, this function will be called
onPushing|func|yes| |when pulling, this function will be called
## Method
startRefresh():force begin pull down refresh
finishRefresh():end pull down refresh