Есть ли способ сохранить рекурсивный порядок детей с помощью Normalizr? - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю отсортированный массив комментариев с сервера.Каждый комментарий имеет атрибут comment.children, который также является отсортированным массивом других комментариев.Они могут быть вложены в глубину n.Например:

const nestedComments = [
  {
    id: 1,
    body: "parent comment",
    children: [
        {
          id: 4,
          body: 'child comment',
          children: [
            {
              id: 7,
              body: 'grandchild comment #1',
              children: [],
            },
            {
              id: 6,
              body: 'grandchild comment #2',
              children: [],
            },
            {
              id: 5,
              body: 'grandchild comment #3',
              children: [],
            },
          ]
        },
        {
          id: 3,
          body: 'second child comment',
          children: []
        }
    ],
  },
  {
    id: 8,
    body: 'parent comment #2',
    children: []
  },
];

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

const commentSchema = new schema.Entity('comments');
const commentListSchema = new schema.Array(commentSchema);
commentSchema.define({children: commentListSchema});
const normalizedComments = normalize(nestedComments, commentListSchema);

Результат в значительной степени соответствует ожидаемому:

{
  entities: {
    // All of the comments ordered their id's, this is fine and what I want
  },
  results: [1,8] // understandable but not what I want
}

Итакон сохраняет порядок корневых комментариев, но ничего не делает для вложенных дочерних комментариев.Есть ли способ сделать это так, чтобы каждая группа братьев и сестер имела свой собственный массив results?Что-то похожее на это:

results: [[1,8], [4,3], [7,6,5]]; 

Или, может быть, есть лучший способ сохранить эту информацию, и я также был бы рад услышать об этом.

1 Ответ

0 голосов
/ 20 декабря 2018

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

entities: {
  {
    id: 1,
    body: 'parent comment',
    children: [4,3]
  },
  ...
  {
    id: 4,
    body: 'child comment',
    children: [7,6,5],
  },
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...