react-native scrollview with image lazy load
npm install react-native-scrollview-lazyload or |setState({ isRendered: true }) for component. Only trigger once. |setState({ isInScreen: true }),Only trigger once. |npm install react-native-scrollview-lazyload --save* Lazy load image:
* Lazy load image:
* Lazy load components:
* Trigger components in screen:
* Lazy load area(default is 1000):
``javascript
var React = require('react-native');
var {
AppRegistry,
Text,
View,
Image,
ListView,
} = React;
var LazyComponent = React.createClass({
getDefaultProps: function() {
return {
lazyRender: false
};
},
getInitialState: function() {
return {
isRendered: !this.props.lazyRender,
};
},
shouldComponentUpdate: function() {
// forceRender is dont used lazy render
if(this.state.isRendered && !this.props.forceRender) {
return false;
}
return true;
},
renderLoading: function() {
return (
);
},
render: function(){
var content = (
if(!this.state.isRendered && this.props.lazyRender) {
content = this.renderLoading();
}
return (
{content}
);
},
});
var InScreenComponents = React.createClass({
shouldComponentUpdate: function() {
// forceRender is dont used lazy render
if(this.state.isInScreen) {
this.setState({ title: 'Is in screen first time'})
}
return false;
},
render: function(){
return (
);
},
});
var LazyloadView = require('@ali/react-native-lazyloadview');
...
render: function() {
// ListView
var body = [],
rowStyle = {
flex:1,
height: 60,
alignItems: 'center',
justifyContent: 'center',
flexDirection: 'row',
},
renderElement = function(d){
return (
style={{
width: 60,
height: 60,
position: 'absolute',
left: 0,
}}
/>
);
};
for(var i = 0 ; i < 100; i++) {
body.push({
ref: 'row' + i,
img: 'https://placeholdit.imgix.net/~text?txtsize=8&txt=60%C3%9760&w=60&h=60',
index: i,
});
}
return (
dataSource={this.props.dataSource.cloneWithRows(body)}
renderRow={(rowData, sectionID, rowID, highlightRow) => {
// console.log('renderRow = ', rowData, rowID);
return renderElement(rowData);
}}
_onScroll={(e) => {
console.log('_onScroll = ', e.nativeEvent);
}}
>
);
// ScrollView
var body = [],
rowStyle = {
flex:1,
height: 60,
alignItems: 'center',
justifyContent: 'center',
flexDirection: 'row',
},
imgStyle = {
width: 60,
height: 60,
position: 'absolute',
left: 0,
};
for(var i = 0 ; i < 100; i++) {
var imageUrl = 'https://placeholdit.imgix.net/~text?txtsize=8&txt=60%C3%9760&w=60&h=60';
body.push(
style={imgStyle}
/>
);
}
return (
}}>
_onScrollEndDrag={(e) => {
}}
_renderHeader={(e) => {
// when add this props please return something
return (
}}
{body}
);
},
``