【问题标题】:Passing in a key through a map function in Javascript通过 Javascript 中的映射函数传入一个键
【发布时间】:2016-12-27 17:56:41
【问题描述】:

我收到关于数组中每个孩子都需要密钥的警告。我之前也遇到过这个问题,在Coffeescript中已经解决了:"Each child in an array should have a unique key prop" only on first time render of page

我知道我必须通过map 传递密钥,这样map 调用的每个数组都会收到一个唯一的密钥。在 Coffeescript 中,我可以这样做:

component1 = React.createClass({
    render: () ->
        _.chain(@state.users).map((x) -> <component2 profile={x} key={x.id} />),@).value()
)}

component2 = React.createClass({
render: () ->
    return (
        <div>Test</div>
        <div>Test</div>
    )
})

我尝试在 Javascript 中执行此操作,而不是调用新组件,我只是在同一个组件中调用另一个函数。我仍然收到警告:

export default class About extends React.Component {
    aboutMe(item) {
        return (
            <div className="col-xs-12">
                <div className="about-body">
                    <p>{item.description}</p>
                </div>
            </div>
        )
    }

    render() {
        return (
            <div className="container">
                <div className="row">
                    <div className="col-xs-9">
                        {_.chain(this.props.about).map(this.aboutMe).value()} # How would I pass in a key in this `map`?
                    </div>
                </div>
            </div>
        )
    }

【问题讨论】:

  • 那么this.aboutMe 是什么,看起来您将它用作函数,并且您可能想要.map( x =&gt; x.aboutMe ) 或类似的东西。

标签: javascript coffeescript jsx


【解决方案1】:

如果item 有一个可用作键的 id(或其他属性)(demo),您也可以这样做:

aboutMe(item) {
    return (
        <div className="col-xs-12" key={ item.id }>
            <div className="about-body">
                <p>{item.description}</p>
            </div>
        </div>
    )
}

【讨论】:

  • 我想我应该从调用函数的地方传入密钥。我也尝试在aboutMe() 中传递一个密钥,但警告仍然出现。
  • aboutMe() 创建的数组中的每个 JSX 元素都应该有一个键。您也可以在aboutMe() 中进行。
  • 我在答案中添加了一个演示。查看控制台,发现没有关于key 的警告。然后删除key={ item.id },运行它,再次检查控制台。顺便说一句 - 我使用 .map() 而不是 lodash 的地图。
  • 我在添加key 之前和添加key 之后检查了控制台。密钥存储在对象中,我正在正确记录它们(它们确实是唯一的)。
  • 我的意思是你应该检查演示,我已经添加到答案中:)
猜你喜欢
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多