我试图更好地理解键在React组件中的作用。我读了很多,但是我看到的每个例子(比如
React docs
或
the great explanation on S.O.
)假设进入组件的数据是动态的。
这些示例都应用具有数组索引值的键或使用类似于
.map()
动态地将数据库id分配给子组件的每个实例,并满足React对键的需求。
我的例子是在一个静态站点上,静态内容进入子组件,子组件被调用了几次。我最好能创建一个随机数生成器函数
getRandomInt
然后把钥匙用那种方法。
不幸的是,这会导致常见的反应错误:
数组或迭代器中的每个子项都应具有唯一的“键”属性。
检查的渲染方法
CaseStudyOpinionSummary
. 它通过了
孩子来自
DiagnosticCaseStudy
.
我哪里做错了?
父组件(
诊断案例研究
)
import React from 'react'
import CaseStudyOpinionSummary from '../../../components/CaseStudyOpinionSummary'
export default class DiagnosticCaseStudy extends React.Component {
getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
render() {
return (
<CaseStudyOpinionSummary
part="Part One"
partTitle="Diagnosis"
partSubtitle="Primary Care Encounter"
partSummary="Short brief"
key={ this.getRandomInt(0, 100000) }
/>
<CaseStudyOpinionSummary
part="Part Two"
partTitle="Medication and Management"
partSubtitle="Initial Gastroenterologist Encounter"
partSummary="Another short brief"
key={ this.getRandomInt(0, 100000) }
/>
)
}
子组件(
案例研究概要
)
import React from 'react'
export default class CaseStudyOpinionSummary extends React.Component {
render() {
return (
<div>
<section className="lightest-gray-bg">
<section className="aga-cs-container-short">
<section className="aga-container">
<h2 className="aga-cs-orange-title">{[this.props.part, ": ", this.props.partTitle ]}</h2>
<h2 className="aga-cs-question-title">{ this.props.partSubtitle }</h2>
{ this.props.partSummary }
</section>
</section>
</section>
</div>
)
}
}