【发布时间】:2021-04-08 20:19:45
【问题描述】:
我有一个 JavaScript 对象数组,我在 React 状态下保存,单击一下,我更改了数组中一个对象的属性。
我在不改变状态的情况下进行了以下工作,但我当前的 setState() 语法也再次将相同的对象添加到数组的末尾。
如何在状态对象数组中简单地更改其中一个对象的状态,而不添加另一个对象并且不改变状态?
import React, { useState } from 'react';
interface IFlashcard {
noun: string;
article: string;
show: boolean;
}
const initialFlashcards = [
{
noun: 'Dependency',
article: 'die Dependency, die Dependencys',
show: false
},
{
noun: 'Kenntnis',
article: 'die Kenntnis, die Kenntnisse',
show: false
},
{
noun: 'Repository',
article: 'das Repository, die Repositorys',
show: false
},
{
noun: 'Kenntnis',
article: 'die Kenntnis, die Kenntnisse',
show: false
}
];
function LanguageFlashcards() {
const [flashcards, setFlashcards] = useState(initialFlashcards);
const toggleFlashcard = (flashcard: IFlashcard) => {
flashcard.show = !flashcard.show;
setFlashcards([...flashcards, flashcard]);
}
return (
<>
<h2>Language Flashcards</h2>
<ul>
{flashcards.map((flashcard: IFlashcard) => {
return (
<>
<li><span onClick={() => toggleFlashcard(flashcard)}>{flashcard.noun}</span>
{flashcard.show && (
<>
: {flashcard.article}
</>
)}
</li>
</>
)
})}
</ul>
</>
);
}
export default LanguageFlashcards;
【问题讨论】:
-
使用 ref 代替 state
-
虽然下面的问题有点老了,但同样的技术在这里是相关的Whats the best way to update an object in an array in ReactJS?
-
另外,不要为此使用 ref。 (如另一条评论中所建议)
标签: javascript reactjs state