Где я должен добавить код для запуска побочных эффектов, связанных с состоянием Redux? - PullRequest
0 голосов
/ 06 ноября 2019

Я создаю настольное приложение, используя 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 необходимо будет удалить из файловой системы, у пользователя больше нет прав на них.

1 Ответ

1 голос
/ 06 ноября 2019

Редуктор не является подходящим местом для побочных эффектов, кроме смены хранилища.

Существуют библиотеки, созданные для обработки побочных эффектов, связанных с редукцией. Например, есть redux-saga: https://redux -saga.js.org /

Redux-saga - это промежуточное программное обеспечение для редуксов, и саги запускаются теми же действиями, которые вы используетеобновить магазин приставок.

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