Redux动作中的不可序列化文件对象

问题描述 投票:0回答:1

我目前有一个Redux动作,看起来像这样:

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

该文件不可序列化,所以我想知道是否有更好的方法。

当分派动作时,会发生三件事:

  • Reducer更新state.user.name,但忽略avatar
  • Saga将文件上传到API
  • Saga使用FileReader获取数据URL并调度另一个操作(这导致state.user.avatar被更新)

我从不将File对象存储在存储中,仅在操作中。

有没有更好的方法,或者这是不可序列化操作有效的用例?

reactjs redux redux-saga
1个回答
0
投票

该文件在理论上可以序列化(例如,base64),但是使用如此大量的数据可能会使使用devtools更加困难或引起其他意外的副作用。

我同意不将实际文件内容存储在操作有效负载中是有效的。

您可以保存文件的哈希(或仅保存名称和时间戳),并在需要包含内容的情况下,将其用作访问另一类型存储中文件的密钥。这将使时间旅行再次工作,但前提是必须在可以访问文件内容的相同环境中重播动作。

© www.soinside.com 2019 - 2024. All rights reserved.