I have an array of objects which I use to list values in page with map. But from time to time I receive this error.
Warning: Each child in a list should have a unique “key” prop.
Although keys are unique.
Maybe anyone knows what could be wrong here?
JavaScript
x
19
19
1
const items = [
2
{key: 1, name: 'Item one', value: 34 },
3
{key: 2, name: 'Item two', value: 45 },
4
{key: 3, name: 'Item three', value: 12 },
5
]
6
7
const item = ({ name, value, key }) => (
8
<div>
9
<p>{name}</p>
10
<p>{value}</p>
11
</div>
12
)
13
14
return(
15
<div>
16
{items.map(i => item(i))}
17
</div>
18
)
19
Advertisement
Answer
item
needs to be a component, and React component names need to be capitalised. Your Item
component is expecting an object. Your “key” needs to be placed on the mapped component.
JavaScript
1
35
35
1
// Accepts items
2
// From each object in the array it gets the
3
// key, name, and value, and returns a new
4
// component
5
function Example({ items }) {
6
return (
7
<div>
8
{items.map(item => {
9
const { key, value, name } = item;
10
return <Item key={key} value={value} name={name} />
11
})}
12
</div>
13
);
14
}
15
16
// Accepts an object - returns some JSX to be rendered
17
function Item({ name, value }) {
18
return (
19
<div>
20
<p>{name}</p>
21
<p>{value}</p>
22
</div>
23
);
24
}
25
26
const items = [
27
{key: 1, name: 'Item one', value: 34 },
28
{key: 2, name: 'Item two', value: 45 },
29
{key: 3, name: 'Item three', value: 12 },
30
];
31
32
ReactDOM.render(
33
<Example items={items} />,
34
document.getElementById('react')
35
);
JavaScript
1
3
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
2
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
3
<div id="react"></div>