- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 React 应用程序中,我使用数据库 ID 作为键来渲染从服务器返回的项目数组。
items.map(item => <Item key={item.id}/>)
这工作正常,但现在我想做乐观更新,所以我在将新项目提交到服务器之前将其插入数组中,然后在 post 操作完成时添加数据库 ID 。现在,我的数组短暂包含没有 id 的项目,由于缺少键而导致错误。
该怎么办?我知道使用索引作为键被认为是反模式( https://www.menubar.io/react-keys-index/ ),所以这是不可能的。我也不想为这些项目生成新的唯一 ID,因为一旦将它们保存到数据库,它们都会有两个 唯一 ID。我考虑过对未保存的对象使用随 secret 钥,但这似乎是一个不稳定的解决方案。
对于这种情况有最佳实践解决方案吗?我不是第一个遇到这个问题的人。
最佳答案
如果您只是追加到列表中,您可以使用从数组索引派生的 id,并且保证永远不会与后端 id 发生冲突。如果后端有递增的主键或字符串 `New-${index}`
,则索引为负值。
或者,由于您无法提前知道后端 id
,因此我没有看到其他解决方案,然后使用 uuid 生成器临时生成该项目的 id
。这样的 id 实际上是无冲突的。
使用索引是非常危险的,因为其他项目之一可能已经使用了该 ID。
关于reactjs - react : Unique keys and optimistic updating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49858097/
我觉得问这个问题有点愚蠢,但为了把事情弄清楚,有时必须问一些愚蠢的问题:) 因此,我们可以像 Martin Kleppmann 在他的演讲中所做的那样定义写入偏差: Write skew patter
当使用乐观锁定策略时,可以解决如下并发问题: | the first transaction started ||
我正在尝试安装 angular phone cat 应用程序并使用 karma 测试运行器运行测试用例。我安装了 Node v0.10.33。我已经在全局范围内安装了 karma 。现在,我尝试使用“
首先,我知道有很多关于该主题的已发布问题:1 2 3 4 5 .建议的方法和原因: Marshal.SizeOf() 1 - 不适用于托管类型。 GC.GetTotalMemory 1 2 - 容易出
在我的 React 应用程序中,我使用数据库 ID 作为键来渲染从服务器返回的项目数组。 items.map(item => ) 这工作正常,但现在我想做乐观更新,所以我在将新项目提交到服务器之前将其
所以我正在阅读 Optimistic UI这是我想在我的 android java 应用程序中实现的东西。 我的 Android 应用程序与我的其余 api 连接。我的困惑是我该怎么做? 我有一个产品
在思考 BitTorrent 的工作原理时,我想到了几个问题。如果有人可以分享一些可能的回应,将不胜感激。 假设一个 BitTorrent 从跟踪器获得 50 个对等点,然后与其中的 20 个建立连接
我正在调试使用 JPA/Hibernate 和 Postgres (9.6.2) 的 Java 应用程序的奇怪行为。 应用程序有 3 个实体:User、Country、UserEvent。 Hiber
我正在尝试使用 yargs 为 Node 模块编写 CLI但是我很难设置两个可以使用的不同命令,一个只需要一个参数,而另一个需要两个。这是我目前所拥有的 var argv = require('yar
我正在阅读 intro to redux pattern , 那里有以下段落: ... consider the new requirements becoming common in front-e
我正在使用具有 Render Prop API 并尝试在 UI 中执行乐观响应的组件。 到目前为止,我在 _onSubmit 中有这个 block 功能- createApp({ variab
尝试修复 Carto tool from Mapbox 的离线安装在 Ubuntu 14.04 上。目前, Node 给我一个错误,它找不到 optimist 模块。我可以手动找到一个 optimis
正在关注 the Apollo docs on Mutation components ,我有一个有效的 Mutation 组件,看起来像 Apollo 文档中提供的这个示例: { cons
我正在寻找一种让乐观的用户界面从列表中删除项目的方法。 列表的查询是: myQuery{ Foo:{ Bar:{ id } } 删除突变: mutation deleteBar(inp
我正在尝试测试我的应用程序的乐观锁定实现。然而结果并不是我所期望的。我测试的步骤如下 从数据库加载实体 将版本属性设置为比数据库中存在的版本属性小 1 将另一个只是字符串的属性更改为其他内容 保存实体
我是 optimist 的新手我做了一些谷歌搜索和尝试,但我仍然找不到添加 --help 选项的优雅方法。 我看到一个 help()文档上的选项。有了这个,我希望以下工作: var argv = re
使用 React.js 真的很愉快。 我根据官方教程搭建了一个简单的评论应用。 您可以添加、编辑和删除评论。它们每 10 秒通过 GET 拉取一次。 本教程有一次提到乐观更新:在创建、更新或删除操作的
我们使用 SendGrid API 将敏感电子邮件发送到 Office365 托管的电子邮件地址。默认情况下,这两种服务都使用机会性 TLS,这反过来会让您相信电子邮件始终会使用 TLS 进行加密。
有一个实体 Foo 带有 @Version 列。如果我想删除它,我希望 Spring Data JPA 和/或 Hibernate 检查 @Version 列的当前值是否与数据库中的值匹配。如果不是,
static boolean unsynchronizedSetter(Date expected){ Date newDate = new Date(); AtomicReferen
我是一名优秀的程序员,十分优秀!