У меня есть FlatList
, в котором я отображаю некоторые задания, которые я получаю с моего сервера. Я недавно добавил фильтры и хочу отображать отфильтрованный список заданий всякий раз, когда пользователь выбирает фильтр. Я использую
extraData
в моем FlatList
, чтобы сигнализировать о том, что я хочу, чтобы он был повторно обработан. Перерисовывает, но с ошибкой.
Моя проблема заключается в следующем:
- Пользователь применяет фильтр A, который приводит к списку заданий X.
- Затем пользователь отменяет выбор фильтра A и выбирает фильтр B. Это должно привести к списку заданий Y. Однако в моем случае задания Y и X (из предыдущего фильтра) отображаются на экране.
проблема с FlatList
. Я добавил ведение журнала и увидел, что отправляю правильный список заданий (Y), но FlatList объединяет это с заданиями из предыдущего фильтра.
У меня есть функция formatJobsData
, которая вызывается всякий раз, когда применяется фильтр:
formatJobsData = (jobsData) => {
var json = JSON.parse(JSON.stringify(jobsData));
if (this.state.isFilterActive == true ) {
if (filters.driving.under15Pressed == true) {
for (var _id in json) {
if (json[_id].duration_driving != null && json[_id].duration_driving.value > 899)
delete json[_id];
}
}
//additional logic for determining the list of jobs to be displayed.
}
for (var _id in json) {
sort_array.push({
_id: count++,
jobtitle: json[_id].jobtitle,
company: json[_id].company,
duration_driving_value: json[_id].duration_driving.value,
duration_transit_value: json[_id].duration_transit.value,
duration_walking_value: json[_id].duration_walking.value,
duration_driving: json[_id].duration_driving.text,
duration_transit: json[_id].duration_transit.text,
duration_walking: json[_id].duration_walking.text,
date: json[_id].date,
formatedDescription: json[_id].formatedDescription,
applyUrl: json[_id].applyUrl
});
}
return sort_array;
}
Затем я отправляю список отфильтрованных заданий моей функции RenderJobs
, которая отвечает за отображение заданий:
return(
<ScrollView contentContainerStyle={styles.bkg}>
<RenderJobs
jobsData={this.formatJobsData(this.state.jobs)}
isLoading={this.props.jobs.isLoading}
errMess={this.props.jobs.errMess}
navigation={this.props.navigation}
sortOrder={this.state.selectedSortOrder}
sortArray={this.state.sortArray}
sortOrFilterOrderProps={this.state.sortOrFilterApplied}
/>
)
}
В RenderJobs я обрабатывать данные и передавать их в FlatList.
function RenderJobs(props) {
var mapObj = {
mins:"min",
hours:"ore",
hour: "ora"
};
const renderJobItem = ({item}) => {
//handle data
return (
<Panel
jobTitle={item.jobtitle}
company={item.company}
durationCar={durationCarApi}
durationTram={durationPublicTransportApi}
durationWalking={durationWalkApi}
dateAdded={formattedApiDate}
onPress={() =>
{
props.navigation.navigate('JobDetails', {
jobTitle: item.jobtitle,
company: item.company,
durationCar: durationCarApi,
durationTram: durationPublicTransportApi,
durationWalking: durationWalkApi,
jobDescription: formattedJobDescription,
applyUrl: item.applyUrl
})
}
}/>
);
}
return (
<FlatList
data={props.jobsData}
extraData={props.sortOrFilterOrderProps}
renderItem={renderJobItem}
keyExtractor={(item, index) => item._id}
style={{marginTop: 10}}
/>
);
}
Любая помощь будет высоко оценена!