Problem

我收到这样的警告:

警告:数组或迭代器中的每个子级都应该有一个唯一的"键"属性.判断EventsTable的渲染方法.更多信息请参见fb.me/react-warning-keys.

react-runtime-dev.js?8fefd85d334323f8baa58410bac59b2a7f426ea7:21998警告:数组或迭代器中的每个子级都应具有唯一的"键"属性.判断事件的渲染方法.更多信息请参见fb.me/react-warning-keys.

来源

这是EventsTable:

EventsTable = React.createClass({
  displayName: 'EventsTable',

  render() {
    console.dir(this.props.list);

    return (
      <table className="eventlayui-table">
        <thead>
          <tr>
            {_.keys(this.props.list[0]).map(function (key) {
              if (key !== 'attributes') {
                return <th>{key}</th>;
              }
            })}
         </tr>
        </thead>

        <tbody>
          {this.props.list.map(function (row) {
            return (
              <Event key={row.WhatId} data={row} />
            );
          })}
        </tbody>
      </table>
    )
  }
});

这是Event:

Event = React.createClass({
  displayName: 'Event',

  render() {
    return (
      <tr>
        {_.keys(this.props.data).map((x) => {
          if (x !== 'attributes')
            return <td>{this.props.data[x]}</td>;
        })}
      </tr>
    )
  }
});

问题

很明显,我在<Event />组件上有keyprops .我遵循的惯例是,组件中应该包含key,而不是HTML本身(换句话说,Event组件中的HTML标记).根据官方文件:

密钥应始终直接提供给数组中的组件,而不是数组中每个组件的容器HTML子级:

我非常困惑.为什么我会收到警告?

推荐答案

你试过在<th>标签上加key吗?

         <tr>
            {_.keys(this.props.list[0]).map(function (key) {
              if (key !== 'attributes') {
                return <th key={key}>{key}</th>;
              }
            })}
         </tr>

Reactjs相关问答推荐

实时收听react前端应用程序中的webhook响应

客户端组件中服务器组件的两难境地

如何将Redux工具包添加到expo (SDK 50)项目?

使用下一步中的路由/导航不会立即加载路由

获取未捕获的错误:Gatsby生产版本上的最小化react 错误#418

禁止直接访问Next.js中的页面,同时允许从应用程序内部访问

Chart.js如何go 除边框

如何在react 中过滤数组的数组?

Chakra UI:如何在选中状态下设置复选框 colored颜色

从 redux 调用UPDATE_DATA操作时状态变得未定义

ReactJS on AWS Amplify与EC2上的Spring boot服务之间的混合内容错误

无法使axiosmockadapter正常工作

在 CrafterCMS Studio 中拖动字段

React - 使用 useEffect 还是直接在 onChange 方法中更改值对性能最好?

React + Redux:数据未正确传递给具有动态路由的组件

为嵌套路由配置一个不存在的 url 的重定向

无法在 reactJS 中使用空包装器 <>

antd 找不到 comments

父状态改变后子组件丢失状态

使用 useRef(uuid()) 的目的是什么?