Реагировать: отображение списка в обратном порядке
Я создаю приложение с React и Reflux, и я пытаюсь отобразить список элементов в определенном порядке.
элементы являются настраиваемыми компонентами Post, которые отображаются в обратном хронологическом порядке, поэтому новейшая запись находится в верхней части списка.
Я использую Академию Хана TimeoutTransitionGroup чтобы элементы списка исчезали и исчезали.
проблему я вижу в том, что когда я добавляю новый пост и компонент получает обновленный список с помощью новых реквизитов, переход происходит на последние элемент в списке, а не первый. Я хотел бы, чтобы первый элемент исчез, так как это позиция нового элемента, который был добавлен.
сообщение 2
сообщение 1
есть ли способ указать тот же порядок элементов, но отображать их в обратном порядке или что-то еще похожие?
Это функция рендеринга моего компонента:
if (!(this.props.posts && this.props.ordering)) return false;
var posts = this.props.ordering.map(function(postId, index) {
return <Post key={index} post={this.props.posts[postId]}/>;
}, this);
return (
<div className="post-collection">
<TimeoutTransitionGroup
enterTimeout={500}
leaveTimeout={500}
transitionName="postTransition">
{posts}
</TimeoutTransitionGroup>
</div>
);
это переход CSS:
.postTransition-enter {
opacity: 0;
transition: opacity .25s ease-in;
}
.postTransition-enter.postTransition-enter-active {
opacity: 1;
}
.postTransition-leave {
opacity: 1;
transition: opacity .25s ease-in;
}
.postTransition-leave.postTransition-leave-active {
opacity: 0;
}
любая помощь будет высоко ценится!
2 ответов
вы не должны использовать index как key
теряется смысл. Например, если добавить элемент в начало массива, react обнаружит только один новый ключ - последний. Все остальные компоненты будут согласованы в соответствии с их ключами. Вместо этого в качестве ключа следует использовать уникальный идентификатор записи.
У меня была аналогичная проблема, но, похоже, у op был первоначальный вопрос о том, как правильно использовать ключ в react. С учетом сказанного это работало для изменения порядка от восходящего к нисходящему.
var NotesList = React.createClass({
render: function () {
var notes = this.props.notepad.notes;
return (
<div className="note-list">
{
notes.reverse().map(function (note) {
return (
<NoteSummary key={note.id} note={note}/>
);
})
}
</div>
);
}
});