React / Redux: единственный источник правды при переходе в подробный вид - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть архитектурный вопрос / вопрос передового опыта в отношении реакции и избыточности.

Я использую промежуточное программное обеспечение Redux для запроса сервиса GraphQL и предоставления результатов в реквизитах для подключенных компонентов. Одним из преимуществ graphql является возможность извлекать только ту информацию, которая вам нужна, используя формат их запросов.

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

Я хочу, чтобы массив сущностей в моем состоянии был моим единственным источником правды, а свойство selectedEntityId служило поиском в этом списке сущностей.

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

Решения, которые я могу придумать:

1) Получить всю информацию об объектах (не только имя и описание) на странице списка (и странице просмотра). Проблема в том, что я бы запрашивал кучу информации, которая мне не нужна, на странице списка, что противоречит идее graphql.

2) Имеют 2 свойства в моем штате. Один будет содержать объекты только с именем и описанием, а другое свойство будет содержать список объектов с дополнительной информацией. Проблема с этим решением в том, что у меня есть 2 источника правды.

3) Я могу «жениться» на двух списках сущностей, поэтому, если я перемещаюсь от списка к странице просмотра, я могу насыщать уже существующий список сущностей со страницы списка сущностями, которые я получаю со страницы просмотра (сущности со многими другими свойствами, кроме имени и описания) и используют этот список в качестве моего единственного источника правды. Кажется, это лучшее решение, но я не знаю, как это сделать.

Может кто-нибудь пролить свет на ситуацию?

Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Я не уверен, что это лучший вариант, но, основываясь на ваших решениях, я бы сказал, что третий работает хорошо.

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

Представьте магазин так:

items: {
  id1: {
    isFull: false,
    title: 'Item 1',
    id: 'id1'
  },
  id2: {
    isFull: true,
    title: 'Item 2',
    id: 'id2',
    description: '..',
    lorem: '',
    ...
  }
}

Затем введите isFull на странице сведений и извлеките в случае false.

...