3 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
您需要使用數(shù)組而不是字符串作為文本狀態(tài),因?yàn)槊總€(gè)評(píng)論都有狀態(tài)
const [text, setText] = useState(new Array(comments.length));
comments.map((c,i) => (
<Row key={c._id}>
<Form
onSubmit={(e) => {
e.preventDefault();
addComment(comment._id, { text });
setText(new Array(comments.length));
}}
>
<InputGroup className="mb-3">
<FormControl
placeholder="add a comment"
aria-label="add a comment"
aria-describedby="inputGroup-sizing-default"
value={text[i]}
onChange={(e) => {
const newText = [...text];
newText[i] = e.target.value;
setText(newText);
}}
/>
</InputGroup>
</Form>
</Row>
));
由于狀態(tài)是數(shù)組,現(xiàn)在您需要將值設(shè)置為text[i],當(dāng)您更改狀態(tài)時(shí),您需要更改元素上的i文本

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
您需要更改狀態(tài)以在某處包含文本字符串?dāng)?shù)組,而不僅僅是單個(gè)字符串。然后使用正在迭代的元素的索引來確定要設(shè)置什么值以及要在更改時(shí)更改什么索引。
我認(rèn)為最優(yōu)雅的解決方案是更改comments對(duì)象以包含text屬性,例如:
{
_id: 'somekey',
text: ''
// ...
}
然后映射它們:
const setCommentText = (text, i) => setComments(
comments.map(
(comment, i) => comment !== i ? comment : { ...comment, text }
)
);
comments.map((c, i) => (
<Row key={c._id}>
<Form onSubmit={e => {
e.preventDefault();
addComment(comment._id, {c.text});
setCommentText('', i);
}}>
<InputGroup className="mb-3" >
<FormControl
placeholder="add a comment"
aria-label="add a comment"
aria-describedby="inputGroup-sizing-default"
value={c.text}
onChange={e => setCommentText(e.target.value, i)}
/>
</InputGroup>
</Form>
</Row>
));

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
試試這個(gè)方法
const [inputValues, setInputValues] = useState([]);
const updateValue = (value, index) => {
const newInputValues = [... inputValues];
newInputValues[index] = value
setInputValues(newInputValues);
}
comments.map((c, index) => (
<Row key={c._id}>
....
<InputGroup className="mb-3">
<FormControl
.......
value={inputValues[index] || ""}
onChange={(e) => setInputValues(e.target.value)}
/>
</InputGroup>
</Form>
</Row>
));
添加回答
舉報(bào)