Несериализуемый объект File в действии Redux - PullRequest
0 голосов
/ 28 января 2020

В настоящее время у меня есть действие Redux, которое выглядит следующим образом:

{
  type: 'user/updateRequested',
  payload: {name: 'Foo', avatar: File}
}

этот файл не сериализуем, поэтому мне интересно, есть ли лучший способ.

Когда отправляется действие происходят три вещи:

  • Редуктор обновляет state.user.name, но игнорирует avatar
  • Saga загружает файл в API
  • Saga использует FileReader для получения URL-адреса данных и отправки другого действия (которое приводит к обновлению state.user.avatar)

Я никогда не храню объект File в хранилище, он только в действиях.

Есть ли лучший способ или это вариант использования, где допустимы несериализуемые действия?

1 Ответ

1 голос
/ 28 января 2020

Файл теоретически сериализуем (например, base64), но, вероятно, это усложнит использование devtools или вызовет другие неожиданные побочные эффекты с таким большим количеством данных.

Я согласен, что действительно не хранить фактические данные содержимое файла в действии полезных нагрузок.

Вы можете сохранить ха sh файла (или просто имя и временную метку) и использовать его в качестве ключа для доступа к файлу в другом типе хранилища, если возникнет необходимость в его содержимом. Это заставит путешествие во времени работать снова, но только если действия будут воспроизведены в той же среде, где можно получить доступ к содержимому файла.

...