Выполнение двух быстрых «переключений переключателя» вызывает мерцание, поскольку React-Native Switch обновляет интерфейс пользователя для элемента второго переключателя до того, как Firestore DB завершит первое обновление переключателя.
У меня есть коллекция задач, где каждая задача имеет следующую схему:
task : {
shared: {
sample_user_id_1: true,
sample_user_id_2: false
}
}
Поскольку Firestore возвращает полный снимок документа (а не только конкретную часть документа, которая была обновлена), я вижу здесь два решения для устранения мерцания:
1) Отправлять и передавать только те изменения, которые были обновлены, по сути, одновременно прослушивая только часть документа (отправка изменения состояния независимо от Redux-Firestore), например:
if(newValue.shared[user_id_1] !== oldState.shared[user_id_1])
dispatch(manualShareUpdate(user_id_1));
Это решение не кажется масштабируемым.
2) Измените структуру данных таким образом, чтобы каждый «общий» бит сохранялся независимо от других общих битов, например.
task : {
id: task_1
}
Новая коллекция "task_shared" для каждой задачи, общая пара
task_shared : {
task_id: sample_task_id
user_id: sample_user_id,
shared: true
}