Redux处理新项目和ID

时间:2016-05-13 20:42:39

标签: javascript reactjs redux

我有一个带有列表和id映射的规范化存储:

{
  "byId": {
    "images": {
      "10984": {"id": "10984", "src": "/img.png"}
    }
  },
  "myImages": [
    "10948"
  ]
}

现在我想创建一个新图像,并将其添加到列表中。问题是,在我将其发送到服务器之前,我没有id。所以我可以生成一个随机id

      "tempid19048": {"id": "tempid19048", src: "/img.png"}
  "myImages": [
    "10948",
    "tempid19048"
  ]

然后我将它保存到服务器并获取一个id我发送一个动作。我可能在州的多个部分使用tempid19048

使用新ID更新所有内容的理智方法是什么?我接近这一切都错了吗?

2 个答案:

答案 0 :(得分:1)

您可以在"myImages": { "10948": "10948", "tempid19048": "tempid19048" } 中将ID设为键值对。

myImages["tempid19048"]

现在您想要使用的地方可以用作

"tempid19048"

这将为您提供当前值"myImages": { "10948": "10948", "tempid19048": "newServerID" } 。 如果你需要改变这个tempId,你只需要改变值,键也保持不变。

tempID

因此,无论您使用session.TransmitUnsafe( Details::Solve, samplesCount, pinnedInputData.GetDevicePointer( ), Offset( pinnedOutputApproximationData.GetDevicePointer( ), outputIndex ), Offset( SolutionData.get( ), SolutionIndices.at( outputIndex * SolutionSize ) ), InputLength, OutputLength, samplesCount ); 的地点数量是多少,现在只需要在一个地方进行更新。

答案 1 :(得分:1)

因为Redux实际上是一个客户端状态管理器,所以通常你只想镜像全局状态。如您所知,与Flux / GraphQL不同,它没有任何缓存,乐观更新等功能。我的直觉告诉我,在不损害Redux构建的纯粹简单性的情况下构建这将是困难的。

那就是说,我发现redux-optimistic模仿了Flux对Redux的乐观更新。我没用过它,但看起来还不错。

但即使 表示,我仍然强调设计出任何对临时ID /乐观更新等需求的简单解决方案:

  1. 请求在服务器上创建图像
  2. 显示一个微调器
  3. 来自服务器的成功消息,将新图像与新id添加到全局状态