Я создаю настольное приложение, используя Electron, React и Redux.
Одним из ключевых компонентов этого настольного приложения будет привязка определенных компонентов моего состояния приращения к физическим файлам на диске. ,Веб-сайт является «основной» копией того, доступны ли определенные данные пользователю. Приложение загружает список файлов, к которым оно должно иметь доступ, а затем отслеживает, какие файлы уже были загружены. Типичным рабочим процессом будет загрузка списка, затем нажмите «загрузить», и когда элемент будет загружен, используйте его в приложении.
Когда я обновляю локальный редукционный список элементов, мне нужно также управлятьсостояние этих файлов. Когда запись удаляется из хранилища с избыточностью, мне нужно удалить связанные физические файлы.
Это ставит меня в странное пространство. Очень странно писать редуктор, который вносит изменения в локальную файловую структуру. Это еще хуже, потому что я использую Electron-Redux для синхронизации нескольких процессов - я использую полный стек-редукс как в основном процессе, так и в окне (окнах) рендерера, с Electron-Redux для их общего доступа. состояние.
Чем больше я смотрю на это, тем больше кажется, что редуктор - совершенно неправильное место для этого. Обратная сторона заключается в том, что этот код обязательно должен происходить на основе состояния , что делает излишнее точное место для этого. Не уверен, какое здесь правильное решение - у меня в игре противоречивые принципы проектирования, и я не уверен, как это решить.
Редактировать:
Часть трудностей здесь заключается в том, чторедуктор не делает простую замену состояния. В этом случае редуктор выполняет довольно сложный алгоритм:
Текущее состояние:
[
{
id: 1,
serverState: 'red',
localState: 'file'
},
{
id: 2,
serverState: 'green',
localState: 'file-processed'
}
]
Сервер может отправить (и, следовательно, мои полезные данные действия содержат):
[
{
id: 2,
serverState: 'purple',
},
{
id: 3,
serverState: 'blue',
}
]
В результате мне нужно объединить данные, поэтому мое состояние становится :
[
{
id: 2,
serverState: 'purple',
localState: 'file-processed'
},
{
id: 3,
serverState: 'blue',
localState: 'no-file'
}
]
Обратите внимание, что localState элемента # 2 не изменился, но элементы serverState были перезаписаны,Локальные файлы элемента № 1 необходимо будет удалить из файловой системы, у пользователя больше нет прав на них.