-
Notifications
You must be signed in to change notification settings - Fork 24.8k
Closed
Labels
Resolution: LockedThis issue was locked by the bot.This issue was locked by the bot.
Description
Description
I'm using FlatList to load some records. Above the FlatList I have a button and when I tap this button with 230 items loaded in the FlatList, the performance gets horrible.
I'm using a Smartphone ASUS Zenfone Go LTE ZB500KL-1A058BR with android 6.0
I've created a video to better illustrate:
http://www.youtube.com/watch?v=EIlDnoewVhc
My code:
/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
*/
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
FlatList,
TouchableOpacity,
TextInput,
TouchableWithoutFeedback,
} from 'react-native';
const GLOBAL_DATA = [];
const PER_PAGE = 10;
const paginateArray = (array, pageSize, pageNumber) => {
const _pageNumber = pageNumber - 1;
return array.slice(_pageNumber * pageSize, (_pageNumber + 1) * pageSize);
};
for (let i = 0; i <= 1000; i++) {
GLOBAL_DATA.push({
key: i,
produto: {
descricao: 'Item number ' + i,
}
});
}
export default class flatlistdemo extends Component {
constructor(props) {
super(props);
this.state = {
type: 'default',
data: [],
page: 1,
};
}
componentDidMount() {
this.setState({
data: paginateArray(GLOBAL_DATA, PER_PAGE, this.state.page),
});
}
getPagedOffers = () => {
this.setState((state) => ({
data: state.data.concat( paginateArray(GLOBAL_DATA, PER_PAGE, this.state.page) ),
}));
}
handleLoadMore = () => {
this.setState(
{
page: this.state.page + 1,
},
() => {
this.getPagedOffers();
}
);
}
renderType = () => {
if (this.state.type === 'default') {
return (
<View>
<TouchableOpacity
onPress={() => {
this.setState({
type: 'other'
});
}}
style={{backgroundColor: 'black', padding: 10}}
>
<Text
style={{color: '#fff'}}
>
touch here to change the type 01
</Text>
</TouchableOpacity>
</View>
);
} else {
return (
<View>
<TouchableOpacity
onPress={() => {
this.setState({
type: 'default'
});
}}
style={{backgroundColor: 'blue', padding: 10}}
>
<Text
style={{color: '#fff'}}
>
touch here to change the type 02
</Text>
</TouchableOpacity>
</View>
);
}
}
render() {
return (
<View style={styles.container}>
{this.renderType()}
<FlatList
data={this.state.data}
onEndReached={this.handleLoadMore}
onEndReachedThreshold={50}
getItemLayout={(data, index) => (
{length: 40, offset: 40 * index, index}
)}
renderItem={
({item}) => {
return (
<View
style={{
paddingVertical: 10,
}}>
<TouchableOpacity onPress={() => null}>
<Text
style={{
color: '#000',
height: 40,
justifyContent: 'center'
}}>
{item.produto.descricao}
</Text>
</TouchableOpacity>
</View>
);
}
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
marginTop: 30,
alignItems: 'center',
},
});
AppRegistry.registerComponent('flatlistdemo', () => flatlistdemo);
Solution
Maybe something is wrong with my display: none / block?
Additional Information
- React Native version: 0.43.4
- Platform: Android 6.0
- Development Operating System: MacOS Sierra
- Dev tools: Xcode
gabrielgomesferraz, FunkSoulNinja, aviggiano, rafaelcorreiapoli, EdmundMai and 5 more
Metadata
Metadata
Assignees
Labels
Resolution: LockedThis issue was locked by the bot.This issue was locked by the bot.