Я новичок в Redx и пытаюсь не запутаться, работая с нормализованными состояниями.
У меня есть две страницы: сообщения и пользователи.Каждая страница имеет такие функции, как бесконечные операции прокрутки, обновления и перебора.
Я уже разработал API-интерфейс, который обладает всеми необходимыми мне функциями.
Я создаю форму состояния, подобную этой
{
entities: {
posts: {
"1": {
id: 1,
idUser: 1,
title: "Good day"
image: "/images/goodday.png"
},
"2" : {
id: 2,
idUser: 1,
title: "Nice breakfast!",
image: "/images/breakfast.png"
}
},
postComments: {
"5": {
id: 5,
idUser : 2,
idPost: 1,
comment: "Nice!"
}
},
users: {
"1": { id: 1, name: "Richard" },
"2": { id: 2, name: "Marco" }
}
}
paginator: {
posts: {
page: 1,
loading:false,
refreshing: false,
error: ''
},
users: {
page: 1,
loading:false,
refreshing: false,
error: ''
}
}
}
Вопросы:
1
Предположим, что первая страница посвящена сообщениям, в componentDidMount
Я выбираю сообщения.
Я окажусь в состоянии, подобном тому, которое я описал, где entities.users
уже заполнен пользователем 1, поскольку полученные мной сообщения принадлежат пользователю с идентификатором 1.
Следующее я 'm переход на страницу, где я показываю пользователей.Так что в componentDidMount
я выбираю пользователей.
Вероятно, из загрузки API я снова скачаю пользователя с идентификатором 1.
Я всегда объединяю результаты в состоянии с newState = merge({}, state, entities);
с помощью библиотеки loadash.
Это правильно?В большом приложении это сводится к объединению многих элементов, которые уже присутствуют в магазине.
2
Когда кто-то запрашивает обновление, предположим, что обновление страницы пользователя, яинициализация относительного paginator с его начальным состоянием, и я очищаю entities.users
часть состояния сущностей.
Затем, как только API получен, я заполняю entities.users
новыми результатами.
Теперь, если я вернусь на страницу сообщений, может случиться так, что в сообщении больше не будет относительного пользователя в магазине.
Как правильно выполнять операции обновления такого типа?
Спасибо, и извините за плохой английский:)