首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redux操作中不可序列化的File对象

Redux操作中不可序列化的File对象
EN

Stack Overflow用户
提问于 2020-01-28 07:48:28
回答 3查看 3.2K关注 0票数 2

我现在有一个Redux操作,如下所示:

代码语言:javascript
运行
复制
{
  type: 'user/updateRequested',
  payload: {name: 'Foo', avatar: File}
}

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

当行动被派遣时,会发生三件事:

avatar

  • A
  • A还原器更新state.user.name但忽略state.user.name将文件上传到API
  • Saga使用FileReader获取数据URL并分派另一个操作(这会导致state.user.avatar更新)

我从不将File对象存储在商店中,它只存储在操作中。

是否有更好的方法,还是这是一个非序列化操作有效的用例?

EN

回答 3

Stack Overflow用户

发布于 2020-01-28 08:09:16

该文件在理论上是可序列化的(例如,base64),但它可能会使使用devtools更加困难,或者对这么多数据造成其他意想不到的副作用。

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

您可以保存文件的散列(或简单地保存名称和时间戳),并将其用作在另一种存储类型中访问文件的密钥(如果有必要的话)。这将使时间旅行再次工作,但只有在可以访问文件内容的相同环境中重放这些操作。

票数 3
EN

Stack Overflow用户

发布于 2020-11-17 09:19:46

代码语言:javascript
运行
复制
export default configureStore({
  reducer: {
   \\Put your reducers here
  },
  middleware:getDefaultMiddleware({
    \\this way you don't remove the middlewares
    serializableCheck:false,
  }),
});
票数 0
EN

Stack Overflow用户

发布于 2020-07-10 14:01:18

我也面临着同样的问题。这就是如何配置我的商店。

代码语言:javascript
运行
复制
export default configureStore({
    reducer: {
      vehicles: vehicleReducer,
    },
    middleware: [...getDefaultMiddleware(), apiMiddleware],
});

一旦我摆脱了getDefaultMiddleware,错误就消失了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59944219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档