У меня есть плоский список данных, которые я пытаюсь отсортировать по порядку на основе их даты. При первом запуске приложения список корректен, однако, если пользователь добавляет событие, а затем дает ему время, он не будет сортировать его в остальной части списка, только над элементами, которые не имеют даты или были также введены во времятекущая сессия. Затем, если я обновлю эти точные данные, они будут правильно помещены в список.
Я не уверен, почему плоский список не перерисовывается должным образом, пока пользователь находится в активном сеансе, но отлично работает при обновлении приложения.
Мой плоский список -
render() {
const items = _.sortBy(this.props.todos, (item) => {
return item.date;
});
return (
<View style={{ height: HEIGHT }}>
<AddTodo
textChange={textInput => this.setState({ textInput })}
addNewTodo={this.addTodo.bind(this)}
textInput={this.state.textInput}
/>
<View style={styles.listContainer}>
<FlatList
data={items}
extraData={this.state}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => {
return (
<TodoItem
todoItem={item}
deleteTodo={() => this.props.removeTodo(item)}
/>
);
}}
/>
</View>
</View>
);
}
Тот же компонент, пытающийся без элементов, дает тот же результат -
<View style={{ height: HEIGHT }}>
<AddTodo
textChange={textInput => this.setState({ textInput })}
addNewTodo={this.addTodo.bind(this)}
textInput={this.state.textInput}
/>
<View style={styles.listContainer}>
<FlatList
data={_.sortBy(this.props.todos, (item) => {
return item.date;
})}
extraData={this.props.todos}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => {
return (
<TodoItem
todoItem={item}
deleteTodo={() => this.props.removeTodo(item)}
/>
);
}}
/>
</View>
</View>
Поскольку элементы находятся в методе рендеринга, почему бы ему неотсортировать весь список и только те, у которых нет дат и в текущем сеансе пользователя?
Я могу предоставить больше кода, если необходимо, но я решил, что проблема должна быть в моем плоском списке.