我有一个维护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
答案 0 :(得分:1)
React标识具有唯一key
属性的元素。在组件中,如果您认为元素列表将具有重叠的ID,则可以随时传递唯一的key
属性。
如果要渲染的元素与制作相关,则将键作为输入
<div key={`make_${makeId}`} />
如果您要渲染的元素与模型有关,则将键传递为
<div key={`model_${modelId}`} />
答案 1 :(得分:0)
现在可能会发生某些品牌具有相同的数值
makeId
作为modelId
的数值正在呈现。
从这个问题出发,可以假设makes
和models
是在不同的外壳中呈现的两个不同的数组,这似乎是安全的。将这些变量modelId
和makeId
用作HTML中的ID属性,需要在其前面加上一个字符串,例如model-${modelId}
或make-${makeId}
,因为它们在整个过程中必须是唯一的这页纸。
但是,如果使用React键,则它们不必在整个页面上都是全局的,而只需在Array内部以区分其同级。因此,您可以安全地使用modelId
和makeId
作为键,而无需进行任何修改。
来自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时,将使用该键。当您列出项目组件完全更改时(从模型到制造,反之亦然),它们将始终被重新渲染。因此在这种情况下不会出现渲染问题