【问题标题】:React: Each child in an array or iterator should have a unique "key" prop when Mapping custom componentsReact:在映射自定义组件时,数组或迭代器中的每个子项都应具有唯一的“键”道具
【发布时间】:2016-06-17 15:47:40
【问题描述】:

我有一个自定义的 material-ui 组件,定义如下。

import React, { PropTypes } from 'react';
import Paper from 'material-ui/lib/paper';

function PaperBox (props) {
  return (
    <Paper className={props.layout}>
      <div className="row center-xs">
        <p>{props.box.title}</p>
      </div>
      <div className="row center-xs">
        <p className="col-xs-10">
          {props.box.text}
        </p>
      </div>
    </Paper>
  );
}

PaperBox.propTypes = {
  box: PropTypes.shape({
    title: PropTypes.string.isRequired,
    text: PropTypes.any.isRequired
  }).isRequired,

  layout: PropTypes.string.isRequired
};

export default PaperBox;

在另一个文件中,我有一个父组件,它将一组文本对象映射到上述组件,如下所示

import React from 'react';
import PaperBox from '../shared/PaperBox/PaperBox';

const layout = 'col-md-3 col-xs-8';

function DetailContent (props) {
  return (
    <div className="row around-xs">
      {props.boxes.map(box => <PaperBox key={box.title} box={box} layout={layout} />)}
    </div>
  );
}

export default DetailContent;

你可以想象,“props.boxes”是一个文本对象数组

const boxes = [
  {
    title: 'one',
    text: 'I am a bunch of text'
  },
  {
    title: 'two',
    text: 'I am also a bunch of text'
  },
];

对我来说非常奇怪的是,虽然我在 PaperBox 组件中添加了 key 属性,但它仍然会打印 Warning: E​​ach child in an array or iterator should have a unique "key"道具。 在控制台中。有解决办法吗?

非常感谢

【问题讨论】:

标签: reactjs key mapping


【解决方案1】:

使用数组索引作为每个孩子的唯一键:

props.boxes.map((box, i) => <PaperBox key={i} box={box} layout={layout} />)

【讨论】:

  • 它仍然打印相同的错误消息:'警告:数组或迭代器中的每个子项都应该有一个唯一的“key”道具。 '检查PaperBox的渲染方法'。我发现非常有趣的一件事是,当我删除 DetailContent.jsx 中的“key”属性时,它会打印一个额外的错误:'警告:数组或迭代器中的每个子项都应该有一个唯一的“key”道具。检查DetailContent'的渲染方法。也许问题在于动态创建的自定义子组件? (在这种情况下是 PaperBox)
猜你喜欢
  • 2018-10-31
  • 2016-10-05
  • 2018-01-18
  • 1970-01-01
  • 2017-06-23
  • 2017-02-23
  • 2017-02-03
  • 2018-02-08
相关资源
最近更新 更多