【问题标题】:Can we pass fake keys to children in React.js?我们可以在 React.js 中将假密钥传递给孩子吗?
【发布时间】:2021-05-08 13:25:06
【问题描述】:

我创建了一个组件,它在本地服务器上运行良好。但我的警告低于警告

Warning: Each child in a list should have a unique "key" prop.

收到此警告意味着我们需要修复关键索引道具?如给定here。 下面是我的组件代码的一些 sn-ps..

    render() {
        return (
            <div>
                        <Container>                                                           
                            <Row>                                                           
                                <Col className="col-12">
                                {this.state.client.map((val,index)=>{
                                    if(index == this.state.colaborators.length -1)
                                        return <a href={"/users/"+val}>{val}</a>
                                    return <a href={"/users/"+val}>{val} ,</a>
                                })}
                                </Col>                                                              
                            </Row>
                        </Container>             
                    </div>
                </div>
            </div >
        );
    }
}

export default App;

我检查了一些解决方案from here

正如我所说,我的代码运行良好。我们可以使用一些假钥匙道具吗?例如

key={fake index}

我们正在使用这会影响我的工作代码吗?

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    如果this.state.client 发生变化,不要只使用索引(可悲的是,这很常见);请参阅this article 了解原因及其demo of what can go wrong。您只能使用永远不会更改或仅增长/缩小(而不是同时)的列表来执行此操作,而不能使用顺序更改的列表(您在开头插入,或排序,或...)@987654323 @。

    我猜val 在列表中将是唯一的,所以将其用作key

    {this.state.client.map((val, index) => {
        const href = "/users/" + val;
        const display = index == this.state.colaborators.length - 1 ? val : `${val} ,`;
        return <a key={val} href={href} >{display}</a>;
    })}
    

    【讨论】:

      【解决方案2】:

      如果您的列表顺序不会改变,只需使用:

        return <a key={index} href={"/users/"+val}>{val}</a>
           return <a key={index} href={"/users/"+val}>{val} ,</a>
      

      它不会影响您的代码,它会删除警告。

      【讨论】:

      • 如果this.state.client 中的项目曾经更改顺序,这将无法正常工作。
      • 这可能会导致一些意外行为。请参阅 this post 并提供一些很好的答案。
      • Eslint 总是建议不要使用index 作为键,而且由于性能原因,这不是一个正确的方法。
      • 很多时间元素除了索引之外并没有任何独特的属性
      • @T.J.Crowder 我编辑了答案,以确保不会发生伤害。
      猜你喜欢
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2017-02-01
      • 2014-08-14
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多