React JSX ListItem Key concat

时间:2017-04-05 16:42:03

标签: reactjs jsx

要模块化我的应用,我正在动态创建列表。数据显示正常,但是,我无法实现唯一的列表项ID。我试图将键设置为映射与prop。连接的数组项。

render() {
    return (
      <div>
        <Header as='h3'>{this.props.data['Day'+this.props.day]}</Header>
        <ul>
          {this.props.cities.map((park) => <li key={park+this.props.day}>{park} {this.props.data[park+'Day'+this.props.day+'PrecipPercent']}</li>)}
        </ul>
      </div>
    )
}

我通过此代码段调用组件

let eachDay = [];
for (var i = 0; i < this.state.days; i++) {
      eachDay.push(<MultiParkDetails cities={this.state.sortedCities} data={this.state.weatherData} cols={5} day={i}></MultiParkDetails>);
    }
return ({eachDay})

2 个答案:

答案 0 :(得分:2)

这里的问题是你需要将密钥添加到组件本身,并将其创建并推送到数组中。

let eachDay = [];
for (var i = 0; i < this.state.days; i++) {
      eachDay.push(<MultiParkDetails key={ uniqueKeyGoesHere} cities={this.state.sortedCities} data={this.state.weatherData} cols={5} day={i}></MultiParkDetails>);
    }
return ({eachDay})

你没有将密钥放在单个组件中,当你实际通过map将它们推入一个数组时,或者在这种情况下使用for each循环时,你会声明它。

回顾你的答案,你的答案是正确的:

{this.props.cities.map((park) => <li key={park+this.props.day}>{park} {this.props.data[park+'Day'+this.props.day+'PrecipPercent']}</li>)}

只要连接的值是唯一的。如果您收到任何警告,请在此处发布。你会得到两个警告中的一个,一个是你没有在需要的地方设置一个密钥,第二个是警告说发现重复的密钥意味着你没有使用足够独特的密钥。

有关密钥的更多信息,请参阅此处的facebook文档:https://facebook.github.io/react/docs/lists-and-keys.html#keys

答案 1 :(得分:2)

只需将数组的索引用作键,它将始终是唯一的。使用此:

let eachDay = [];
for (var i = 0; i < this.state.days; i++) {
      eachDay.push(<MultiParkDetails key={i} cities={this.state.sortedCities} data={this.state.weatherData} cols={5} day={i}></MultiParkDetails>);
    }
return ({eachDay})