React使用新项更新列表,但ID可能会重复

时间:2018-12-02 06:27:16

标签: javascript reactjs react-redux

我有一个维护auctions.aggregate([ { "$match": { "owner": "owner", "place": "place" }}, { "$lookup": { "from": "items", "let": { "item": "$item" }, "pipeline": [ { "$match": { "$expr": { "$eq": ["$id", "$$item"] }}} ], "as": "item" }}, { "$limit": 15 } ]) 的有状态组件。例如,以2 lists of different types来思考。每辆车都有一个cars(可以说它具有唯一的make)和makeId(又有一个唯一的model)。现在,我的组件首先显示一个制造商列表,每个制造商都有一个modelId属性,其值为key。现在,单击makeId时,我的make组件将使用所选{{的所有stateful(每个属性以models作为modelId)来更新列表。 1}}。现在可能会发生某些key具有与现在呈现的make相同的数字make的情况(因为品牌和模型位于不同的关系表中)。在这种情况下,更新列表时反应会遇到一些问题吗?

示例:

  

下面是新旧列表的比较。

makeId

3 个答案:

答案 0 :(得分:1)

React标识具有唯一key属性的元素。在组件中,如果您认为元素列表将具有重叠的ID,则可以随时传递唯一的key属性。

如果要渲染的元素与制作相关,则将键作为输入

<div key={`make_${makeId}`} />

如果您要渲染的元素与模型有关,则将键传递为

<div key={`model_${modelId}`} />

答案 1 :(得分:0)

  

现在可能会发生某些品牌具有相同的数值   makeId作为modelId的数值正在呈现。

从这个问题出发,可以假设makesmodels是在不同的外壳中呈现的两个不同的数组,这似乎是安全的。将这些变量modelIdmakeId用作HTML中的ID属性,需要在其前面加上一个字符串,例如model-${modelId}make-${makeId},因为它们在整个过程中必须是唯一的这页纸。

但是,如果使用React键,则它们不必在整个页面上都是全局的,而只需在Array内部以区分其同级。因此,您可以安全地使用modelIdmakeId作为键,而无需进行任何修改。

来自docs

  

数组中使用的键在同级之间应该唯一。然而   它们不必在全球范围内都是唯一的。

答案 2 :(得分:0)

根据文档https://reactjs.org/docs/lists-and-keys.html#keys Keys help React identify which items have changed, are added, or are removed。这意味着当您之前的组件和新的组件是相同的Component类且具有相同的props时,将使用该键。当您列出项目组件完全更改时(从模型到制造,反之亦然),它们将始终被重新渲染。因此在这种情况下不会出现渲染问题