Элементы повторно визуализируются несколько раз, когда новые элементы добавляются в массив данных проп. Так как же избежать этого бесполезного повторного рендеринга предметов?
Я использую
Реактивный род 0,59,0
Реакция 16.8.3
Это то, что я получаю, когда регистрируюсь, Предметы в методе визуализации
renderItem 0
renderItem 1
renderItem 2
renderItem 3
// отсюда снова
renderItem 0
renderItem 1
renderItem 2
renderItem 3
renderItem 4
renderItem 5
renderItem 6
renderItem 7
//gettingData and displaying component
let offset = this.props.fetchedData.length;
//function to fetch data from server
getData() {
fetch(url, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
limit: 20,
offset,
}),
})
.then(response => (response.json())
.then((responseJson) => {
if (responseJson.status) {
this.props.fetchedDataChange(responseJson.data);
}
})
.catch((error) => {
alert(error);
}));
}
//renderItem function for flatlist
renderItem({ item }) {
return (
<View>
<Text>
{item.name}
</Text>
</View>
);
}
render() {
return (
<View>
<FlatList
data={this.props.fetchedData}
renderItem={{ item } => this.renderItem({ item })}
keyExtractor={(item, index) => index.toString()}
extraData={this.props}
initialNumToRender={20}
maxToRenderPerBatch={20}
onEndReached={() => this.getData()}
onEndReachedThreshold={0.5}
/>
</View>
);
}
const mapStateToDispatchProps = dispatch => ({
fetchedDataChange: value => dispatch(fetchedDataChange(value)
});
const mapStateToProps = state => ({
fetchedData: state.fetchedDataReducer.fetchedData
});
export default connect(mapStateToProps, mapDispatchToProps)(gettingData);
//fetchedData reducer component
const INITIAL_STATE = {
fetchedData: [],
};
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case FETCHED_DATA_CHANGED:
return {
...state,
fetchedData: [...state.fetchedData, ...action.payload]
};
default:
return state;
}
};