Предположим, у меня есть несколько записей (например, пользователей) в моей базе данных. У меня также есть два маршрута: один для списка, другой для деталей (где вы можете редактировать запись). Теперь я борюсь за подход к структуре данных.
Я думаю о двух подходах и о том, как они сочетаются.
Общий набор данных
- Я перехожу к
/list
, все мои пользователи загружаются из api a, хранящегося в магазине redux, под ключомusers
, я также добавляю какие-тоusers_offset
иusers_limit
, чтобы отображать только часть списка - Затем перейдите к
/detail/<id>
и сохранитеcurrently_selected_user
с помощью<id>
в качестве значения val..., что означает, что я смогу получить мои пользовательские данные с чем-то вроде этогоusers.find(res => res.id === currently_selected_user)
- обновление будет приятным и легким, так как я работаю с одним набором данных и деталями, указывающими на него.
- добавление нового пользователя также легко, снова просто работая с тем же списком пользователей
Теперь проблема с этим подходом заключается в том, что когда список пользователей становится огромным (скажем, миллионы), для загрузки может потребоваться некоторое время. А также, когда я перехожу непосредственно к /detail/<id>
, я пока не буду загружать всех моих пользователей, поэтому, чтобы получить данные только для того, что мне нужно, я должен сначала загрузить все это. Миллионы пользователей просто для редактирования.
Разделенный набор данных
- Я перехожу к
/list
, и вместо того, чтобы загружать всех моих пользователей из api, я загружаю только пару из них, в зависимости от того, на что будут установлены моиusers_per_page
иusers_current_page
, и я, вероятно, сохраните данные какusers_currently_visible
- Затем я перехожу к
/detail/<id>
, сохраняюcurrently_selected_user
с<id>
как val... и вместо поиска черезusers_currently_visible
я просто загружаю пользовательские данные из api.. - при обновлении я не буду обновлять
users_currently_visible
каким-либо образом - и я не добавлю
То, что я вижу в качестве возможной проблемы, заключается в том, что мне придется после посещения /list
загружать данные из api снова, потому что это может быть не синхронизировано с тем, что в базе данных, я также могу быть ненужной загрузкой данных пользователей, поскольку они могут быть случайно уже внутри моего users_currently_visible
какие-то франкенштейновские синаниганы
- Я подробно, я делаю то же самое, что и в разделенном наборе данных, но вместо прямой загрузки пользовательских данных из api, я сначала проверяю:
- У меня есть
users_currently_visible
- если да, есть ли пользователь с моим идентификатором между ними? если оба они истинны, я тогда использую его как мои пользовательские данные, в противном случае я делаю вызов api
- У меня есть
- то же самое происходит при обновлении, я проверяю, существует ли мой пользователь между
users_currently_visible
, если это так, я также обновляю этот список, если не делаю ничего
Это, вероятно, сработает, но на самом деле это не так. Мне также, вероятно, еще нужно будет загрузить свежий список users_currently_visible
при посещении /list
, потому что я, возможно, добавил новый.
Есть ли какой-нибудь любимый способ любить?... Я уверен, что каждый пользователь одного редуктора должен был встретить одни и те же вещи.
Спасибо!