admin管理员组文章数量:1418426
I'm trying to clear input when i press <button onClick={addComment} className='add-btn'>+</button>
Missing "key" prop for element in iterator react/jsx-key
import React, { useContext, useState } from 'react';
import ContentHeader from './PatientHeader';
import { PatientContext } from '../App';
const moment = require('moment');
const ContentInfo = () => {
const { selectedPatient, ments, setComments } = useContext(PatientContext);
const [ment, setComment] = useState('');
const mentInput = React.createRef();
const addComment = (e: any) => {
const date = moment();
setComments([..ments, { ment: mentInput.current.value, date: date }]);
e.preventDefault();
setComment('');
};
const handleChange = (e: any) => setComment(e.target.value);
return (
<div className='content'>
<ContentHeader />
<div className='info'>
<div className='ments'>
<div>
<p>
<h3 className='ments-text'>Comments:</h3>
</p>
<ul>
{ments.map(c =>
<li>
<div className='new-ment'>
<div>
<strong>{moment(c.date).format('ll')}</strong>
</div>
<div>
{cment}
</div>
</div>
</li>
)}
</ul>
</div>
<div className='create-mentInput'>
<input value={ment} ref={mentInput} onChange={handleChange}
className='form-control' type="text"/>
<button onClick={addComment} className='add-btn'>+</button>
</div>
</div>
</div>
</div>
);
}
The following line is throwing the error, and I cannot figure out why:
(e: any)
const addComment = (e: any) => {
const date = moment();
setComments([..ments, { ment: mentInput.current.value, date: date }]);
e.preventDefault();
setComment('');
};
How can I prevent this error from appearing?
I'm trying to clear input when i press <button onClick={addComment} className='add-btn'>+</button>
Missing "key" prop for element in iterator react/jsx-key
import React, { useContext, useState } from 'react';
import ContentHeader from './PatientHeader';
import { PatientContext } from '../App';
const moment = require('moment');
const ContentInfo = () => {
const { selectedPatient, ments, setComments } = useContext(PatientContext);
const [ment, setComment] = useState('');
const mentInput = React.createRef();
const addComment = (e: any) => {
const date = moment();
setComments([...ments, { ment: mentInput.current.value, date: date }]);
e.preventDefault();
setComment('');
};
const handleChange = (e: any) => setComment(e.target.value);
return (
<div className='content'>
<ContentHeader />
<div className='info'>
<div className='ments'>
<div>
<p>
<h3 className='ments-text'>Comments:</h3>
</p>
<ul>
{ments.map(c =>
<li>
<div className='new-ment'>
<div>
<strong>{moment(c.date).format('ll')}</strong>
</div>
<div>
{c.ment}
</div>
</div>
</li>
)}
</ul>
</div>
<div className='create-mentInput'>
<input value={ment} ref={mentInput} onChange={handleChange}
className='form-control' type="text"/>
<button onClick={addComment} className='add-btn'>+</button>
</div>
</div>
</div>
</div>
);
}
The following line is throwing the error, and I cannot figure out why:
(e: any)
const addComment = (e: any) => {
const date = moment();
setComments([...ments, { ment: mentInput.current.value, date: date }]);
e.preventDefault();
setComment('');
};
How can I prevent this error from appearing?
Share Improve this question edited Jan 26, 2022 at 21:57 Dharman♦ 33.5k27 gold badges101 silver badges149 bronze badges asked Jul 16, 2021 at 10:59 ArtemijArtemij 71 silver badge6 bronze badges 1- List and keys. – Andy Commented Jul 16, 2021 at 11:05
2 Answers
Reset to default 3When you use map
to render list of ponents you must provide a unique key
prop to rendered ponent - in your case you must provide key prop to <li>
.
{ments.map(c =>
<li key={c.id}>
<div className="new-ment">
<div>
<strong>{moment(c.date).format('ll')}</strong>
</div>
<div>
{c.ment}
</div>
</div>
</li>
)}
Keep in mind your key prop must be unique within your data, if for some reason it is impossible for you, you can use index
from Array.map
method, but it's not remended
In order for react to be faster you should not avoid this warning and put the key prop to a tag (in this case it's li). Key prop should be either an index or the id of the object, keys should not have duplicates.
You can resolve this with two different approaches:
{ments.map(c =>
<li key={c.id}>
<div className="new-ment">
<div>
<strong>{moment(c.date).format('ll')}</strong>
</div>
<div>
{c.ment}
</div>
</div>
</li>
)}
or accessing the index
{ments.map((c, index) =>
<li key={index}>
<div className="new-ment">
<div>
<strong>{moment(c.date).format('ll')}</strong>
</div>
<div>
{c.ment}
</div>
</div>
</li>
)}
本文标签: javascriptMissing quotkeyquot prop for element in iterator reactjsxkey in ReactStack Overflow
版权声明:本文标题:javascript - Missing "key" prop for element in iterator reactjsx-key in React - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745278627a2651317.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论