Как я могу использовать результирующий массив в моем нормализованном состоянии для отображения сообщений в отсортированном порядке - PullRequest
0 голосов
/ 29 августа 2018

Я успешно использовал нормализатор в своем приложении реакции для нормализации ответа API. В моем состоянии у меня есть объекты и массив результатов. Я использую сущности для рендеринга сообщений в моем компоненте реагирования, но они не в их первоначальном порядке.

Я понимаю, что сущности - это объект, поэтому он не будет поддерживать порядок. Я также понимаю, что я должен использовать массив результатов, так как он имеет идентификаторы в исходном порядке. Мои вопросы: как мне использовать этот массив результатов в моем компоненте реагирования для отображения сообщений в их первоначальном порядке?

Я искал в стеке + гугл и, похоже, не нашел конкретного ответа на мой вопрос. Я также попытался выполнить сортировку перед тем, как отобразить объект лица в моем рендере, следующим образом:

Object.values(posts).sort((a, b) => a.created_on > b.created_on)

или

Object.values(posts).sort((a, b) => a.created_on + b.created_on)

или

Object.values(posts).sort((a, b) => a.created_on - b.created_on)

и затем с использованием карты. Но все это не работает.

Есть ли конкретный способ сделать это без использования denormalizr?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Нам может понадобиться больше информации, так как я считаю, что это должно работать. Следующая функция сортирует массив и рендерит его в порядке возрастания внутри оператора реакции рендеринга.

{array.sort((a, b) => a.created_on > b.created_on).map((item) => {
      return (
        <div>{item.name}</div>
      )
}}

Говоря, что это не работает, вы имеете в виду посты, отображаемые на карте, но не отсортированные? Посты вообще не отображаются? Я не использовал normalizr, но если normalizr возвращает массив, а вы выполняете сортировку массива, я думаю, проблема в другом месте.

0 голосов
/ 30 августа 2018

Спасибо большое. Однако ...

Я только что понял, что метод сортировки не нужен в моем рендере, так как я использую normalizr, у которого уже есть массив результатов всех записей в правильном порядке по их идентификаторам в то время как очевидно, что все сообщения находятся в объекте лица

Итак, мне удалось отобразить этот массив результатов нормализатора, который содержит все идентификаторы ключей каждого поста, а затем вернуть каждый пост в объекте entity по соответствующему идентификатору ключа.

Как это ...

resultArray.map(post => postEntities[post]);

Это возвращает все сообщения в правильном порядке, так как я сопоставляю уже упорядоченный массив результатов.

Кстати, для этого я использую селекторы. Таким образом, приведенный выше код находится не в компоненте рендеринга, а в селекторах. Js

0 голосов
/ 29 августа 2018

Может быть, вы неправильно называете сортировку? Это похоже на работу:

const sorter = (a, b) => {
  return a < b;
}

let posts = [4, 5, 7, 1]
posts.sort(sorter).map(i => console.log(i))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...