当前位置: 首页 > 面试题库 >

ReactJS:在数组元素中提供键的最佳方法是什么

岳佐
2023-03-14
问题内容

我只是从ReactJS开始,并尝试了其他类似问题的解决方案,但到目前为止还算不上成功。

这是我的工作代码:

import React from 'react';
import ReactDOM from 'react-dom';


const Numbers = ['2', '4', '6', '8'];

const NumbersList = (props) => (
   <ul>
      {
          props.Numbers.map (
             number => <li key={number}>{number * 2}</li>
          )
      }
    </ul>
)
ReactDOM.render(<NumbersList Numbers = {Numbers} />, document.getElementById('root') )

但是当我将Numbers Array传递为:

const Numbers = ['4', '4', '6', '8']

我收到此错误:

警告:遇到两个具有相同密钥的孩子4。密钥应该是唯一的,以便组件在更新期间保持其身份。

所以我的问题是:在这种情况下,提供密钥的最佳方法是什么?如果我将数字(如上例所示)用作键,那么避免此警告的最佳解决方案是什么?

谢谢!


问题答案:

如果项目没有明确的唯一属性(非唯一基元列表),则可以使用索引。

注意:
如果项目具有唯一性id(并且应该是非基本体列表),则不要使用索引,因为它是反模式。

const Numbers = ['2', '4', '4', '8'];



const NumbersList = (props) => (

  <ul>

  {

  props.Numbers.map (

    (number, index) => <li key={index}>{number * 2}</li>

  )}

  </ul>

)



ReactDOM.render(

  <NumbersList Numbers = {Numbers} />,

  document.getElementById('root')

)


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="root"></div>


 类似资料:
  • 问题内容: 我遇到了一个问题,需要成对地遍历数组。最好的方法是什么?或者,作为替代方案,将Array转换为成对的Array(然后可以正常迭代)的最佳方法是什么? 这是我得到的最好的。它必须是,而且不是很漂亮。有没有更好的办法? 问题答案: 您可以 映射 跨步而不是对其进行迭代,从而可以将结果作为 常量获取: 如果只需要遍历对,并且给定的数组很大,那么避免创建带有延迟映射的中间数组可能是有利的:

  • 问题内容: 如果您将数组作为状态的一部分,并且该数组包含对象,那么通过更改其中一个对象来更新状态的简便方法是什么? 示例,从关于react的教程中修改而来: 问题答案: 在更新状态时,关键部分是将其视为不变。如果可以保证,任何解决方案都可以。 这是我使用immutability-helper的解决方案: jsFiddle:

  • 问题内容: 我正在创建一个通用的Web服务,该服务可能有许多不同的客户端,但有些客户端目前无法预料。 我已经有了一个不错的Java Services API,并希望在此之上提供一个Web服务外观。 SOAP与REST辩论的双方都有很多争论,这让我想知道是否有一种简单的方法可以同时提供两者?不一定要在同一时间将两者都用于同一部署(尽管可能不错)……而是向客户提供选择。 问题答案: 不,没有。SOAP

  • 问题内容: 好, 我知道有关的所有内容,但这会删除最后一个元素。在不删除数组的情况下获取数组最后一个元素的最佳方法是什么? 编辑:这是奖金: 甚至 问题答案: 此主题中的许多答案为我们提供了许多不同的选择。为了能够从他们中进行选择,我需要了解他们的行为和表现。在此答案中,我将与您分享我的发现,并针对PHP版本和(预计2018年12月13日)进行测试。 我将测试的选项是: 选项1。 选项.2。 (所

  • 问题内容: 我有一个状态数组,比方说this.state.arr。我想向此状态属性添加一些内容,然后更改更多属性。 选项1 选项2 所以..我知道this.state应该被视为不可变的。但是可以像在选项1中那样使用它还是可以通过它设置状态,还是可以像在选项2中那样使用它,这样总是总是首先在内存中进行复制 问题答案: 使用concat的另一种简单方法:

  • 从Java 8开始,所以需要一点时间来适应它。这是一个经典的问题,我有一个想要转换的对象数组。 在Java8之前,理想的代码是(没有空指针): Java8中最好的版本是什么?