Я думаю, что ответ сводится к следующему:
Вам нужно создавать полное состояние приложения из документов с нуля для каждого изменения - или вы можете определить, какое действие требуется от входящих изменений?
Подумайте о своем потоке данных, когда пользователь взаимодействует с приложением. Вы, вероятно, запускаете приложение так:
allDocs → derive initial AppState → render in React
Так что же произойдет, если, например, пользователь создаст новый элемент?
putDoc → allDocs → derive entire AppState → render in React
или вы:
putDoc → trigger Redux action that modifies AppState → render in React
Если вы пойдете с последним (я так полагаю), ваш обработчик изменений в основном выглядит так же. Есть входящие изменения и вопрос: можете ли вы определить требуемое действие Redux из входящего изменения? Изменение дает вам:
- тип документа (надеюсь, у вас есть это свойство)
- была ли она удалена или нет
Итак, когда в вашем обработчике происходят изменения, вы должны сделать:
changeHandler → trigger Redux action that modifies AppState → render in React
Какой вариант 2.
Вариант 1 выглядит следующим образом:
changeHandler → allDocs → derive initial AppState → render in React
Вариант 1 имеет существенный недостаток: если ваше приложение отключается на несколько недель и удаленная БД получает много изменений (например, из-за того, что приложение Electron запущено на другом компьютере), возврат в оперативный режим приведет к A МНОГИЕ изменения загружаются, и каждое отдельное изменение будет вызывать ваш fetchAllDocs()
звонок.
НО это похоже на плохую схему, поскольку я изменяю извлеченные данные.
Почему? Вы не изменяете извлеченные данные (я предполагаю, что вы имели в виду исходные allDocs). Первые allDocs помогли только получить AppState, с которым вы работаете в Redux и React. Вы, вероятно, не используете материал в allDocs в качестве своего AppState, не так ли?