Неспособность сохранить DocumentSnapshot в реагировать на избыточность приводит к ошибке «Превышен максимальный размер стека вызовов при подкачке» - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю приложение с естественной реакцией. В этом приложении я сохраняю последний документ (lastDo c) результата запроса в избыточном коде, и когда приложение перезапускается, я использую постоянный lastDo c в качестве отправной точки для запроса в хранилище, чтобы я мог На странице оставшихся документов пожарного хранилища, где пользователь остановился. Я понял (после того, как максимальный размер стека вызовов превысил ошибку), что даже если я отправляю снимок документа для сохранения в редуксе, повторно гидратированные данные имеют тип Object , а не QueryDocumentSnapshot, и это нарушает мой startAfter запрос, приводящий к вышеупомянутому Превышен максимальный размер стека вызовов ошибка.

Есть ли способ сохранить моментальный снимок документа в Reaction-redux? Или я должен перейти на что-то вроде redux-firestore ?

Вот что я отправляю на redux:

enter image description here

Это то, что гидратируется из редукса:

enter image description here

1 Ответ

0 голосов
/ 11 февраля 2020

Итак, поскольку вы не можете хранить моментальные снимки документов в response-redux, и поскольку я не хочу переключаться на redux-firestore, что, вероятно, приведет к изменениям в моей кодовой базе, которые я не хочу go просматривать на этом этапе Я придумал это альтернативное решение.

После получения моих записей из бэкэнда Firestore я получаю последний документ в снятом снимке запроса и добавляю к нему идентификатор документа следующим образом:

var tLastDoc = querySnapshot[pageSize - 1];
tLastDoc.tDocId = querySnapshot[pageSize - 1].id;

И кеширую этот tLastDo c в redux.

И во фрагменте, где происходит подкачка страниц, я проверяю, является ли последний документ, который я собираюсь использовать для startAfter , частью моего запроса на самом деле - это только что снятый снимок документа или не -snapshot извлекается из Redx следующим образом:

if(lastDoc != null && typeof lastDoc.id === 'undefined'){
  //stripped snapshot. get the document snapshot and use it for paging
} else {
  //already a document snapshot, use it for paging
}

Помните из скриншотов в вопросе выше, что фактический снимок документа будет иметь свойство "id". Если «id» не определен, это фактически «снятый» моментальный снимок документа, получаемый от redux.

Если это «снятый» моментальный снимок документа, полученный из redux, я просто извлекаю снимок из серверная часть пожарного депо использует назначенное выше свойство tDocId и использует возвращенный снимок документа в качестве моего startAfter параметра.

Эта выборка последнего документа из серверной части пожарного депо будет происходить только один раз каждый раз, когда Пользователь перезапустил приложение для просмотра страниц с помощью кэшированного lastDo c в хранилище приставок. Затем подкачка будет использоваться с использованием последовательных снимков документов, полученных в конце каждой подкачки, пока приложение не будет снова фоновым.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...