我正在创建一个列表列表,并希望为每个元素添加一个唯一键。当我使用React Dev Tool时,新密钥是“2016-10, - ,football”。
import React from 'react'
import ReactDOM from 'react-dom'
const dates = ['2016-10', '2016-11', '2016-12'];
const sports = ['football', 'baseball', 'basketball'];
const Dates = ( { dates, sports } ) => {
return (
<ul>
{ dates.map( date => {
return (
<div key={date.toString()} >
<li>{date}</li>
<Sports sports={sports} date={date}/>
</div>
)
})
}
</ul>
)
}
const Sports = ( { date, sports } ) => {
return(
<ul>
{ sports.map( sport => {
// Results in: key="2016-10,-,football"
// Expected: key="2016-10-football"
return (<li key={[date, '-', sport]} >{sport}</li>)
})}
</ul>
)
}
ReactDOM.render(<Dates dates={dates} sports={sports}/>, document.getElementById('main'))
答案 0 :(得分:3)
key需要一个字符串,所以当你传递一个数组时,你正在调用Array的.toString()函数。如果您执行console.log([date, '-', sport].toString())
将[date, '-', sport]
替换为date + '-' + sport
以修复它。
答案 1 :(得分:0)
它以逗号显示,因为toString
将使用逗号加入数组。
这就是你所拥有的:
arr = ['2016-10', '-', 'football']
console.log(arr.toString); // "2016-10,-,football"
这就是你想要的:
arr = ['2016-10', '-', 'football']
console.log(arr.join()); // "2016-10-football"
因此,请考虑将li
替换为(注意.join()
):
return (<li key={[date, '-', sport].join()} >{sport}</li>)