当前位置: 首页 > 知识库问答 >
问题:

李连杰

姚洲
2023-03-14

我有一个警告:数组或迭代器中的每个孩子都应该有一个唯一的“键”道具。但是我用了一把钥匙。这是我的代码

return (
  <li onClick={this.handleOnMarkAsCompleted} key={Date.now()}>
    { completed ? <b>{value}</b> : value }
  </li>
)

有什么想法吗?为什么会发生呢?

共有3个答案

呼延明朗
2023-03-14

根据ReactJS文档,键仅在周围数组的上下文中才有意义。正确使用密钥的示例。

function ListItem(props) {
  // Correct! There is no need to specify the key here:
  return <li>{props.value}</li>;
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // Correct! Key should be specified inside the array.
    <ListItem key={number.toString()}
              value={number} />

  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

在codepen上试一试

井翰
2023-03-14

日期now()生成每次都相同的当前时间UNIX时间戳(在第二个时间戳中,所有项都被呈现)。密钥必须是唯一的,如错误中所述。添加某种id或迭代器(如果没有替代方法)。

呼延烈
2023-03-14

考虑这两个例子:

const Item = ({ i }) => <li key={i}>li</li>;
const List = ({ data }) => <ul>{data.map((_, i) => <Item i={i} />)}</ul>;

在这种情况下,您将得到:

Warning: Each child in an array or iterator should have a unique "key" prop.

因为li不是一个数组项。它在Item的内部,后者是一个数组项。

所以键入Item将消除问题:

const Item = ({ i }) => <li key={i}>li</li>;
const List = ({ data }) => <ul>{data.map((_, i) => <Item key={i} />)}</ul>;

代码沙盒:https://codesandbox.io/s/oojwjq0lj6

从文档:

关键点仅在周围数组的上下文中才有意义。

例如,如果提取一个ListItem组件,则应将键保留在

关于使用Date.now()的注意事项:

密钥应该是稳定的、可预测的和唯一的。不稳定的键(如Math.random()生成的键)将导致不必要地重新创建许多组件实例和DOM节点,这可能会导致性能下降和子组件中的状态丢失。

 类似资料:
  • 我第一次使用侦探需要一些帮助。我目前正在使用sleuth 2.2.3。释放我的要求是我想传播两个字段product id和product type,这样我就可以从其他微服务中读取这两个值,因为我正在使用baggage传播。

  • 我有一个过滤器(OncePerRequestFilter),它基本上拦截传入的请求并记录traceId、spanId等。它运行良好,这个过滤器位于一个公共模块中,该模块包含在其他项目中,以避免在我的所有微服务中包含spring sleuth依赖项,这就是我将它创建为库的原因,因为对库的任何更改对所有模块都是公共的。现在,我必须添加一个新的传播密钥,它需要通过http头(如trace和spanId)

  • 我试图建立一个应用程序,它有一个角前端和一个Maven/Spring Boot后端,并建立了我的第一个REST控制器。我的问题是,当我从Angular IDE向后端发送GET HTTP请求时,它会返回一个错误,说明: 我的角代码只是试图使用GET方法(即。httpclient.GET('http://localhost:8080/api/getdata')将数据打印到浏览器控制台,但错误阻止了它的

  • 网站开发是制作一些专业性强的网站,比如说动态网页。ASP、PHP、JSP网页。而且网站开发一般是原创,网站制作可以用别人的模板。网站开发字面意思比制作有更深层次的进步,它不仅仅是网站美工和内容,它可能涉及到域名注册查询、网站的一些功能的开发。

  • 我有以下实体 注册程序 教练 官方 基本上,我有与(Trainer-Register steredProgram,官方注册程序)有多对一关系的实体。现在我有一个服务已经满足了我的要求,通过id获取注册程序,我应该只包含所有的和与isDeletedfalse。请参阅下面的服务: 服务 现在,我尝试使用< code>@Query和< code>@EntityGraph,这样我就可以只使用一个查询就获得

  • 请提示我如何让侦察行李在联调系统中工作。它在测试通过模拟HTTP请求时按预期工作,但在测试直接调用服务时不工作。我的应用程序是(Spring Boot 2.5.4,Spring Cloud 2020.0.3): 应用yml: 测试: