reactjs - 编辑按钮应该只能应用于列表中的一项
问题描述
我有一个包含几个对象的列表。每个对象都有自己的按钮。一个是编辑按钮,另一个是保存按钮。
如果我单击编辑按钮,则该按钮将不再显示,而应显示保存按钮。我已经实现了这个逻辑。问题是,当我单击“编辑”按钮时,它会遍历整个列表并且所有按钮都已更改。
但是,当我单击一个按钮时,我只想更改该元素的按钮,而不是整个列表。我怎样才能使它一次只适用于一个元素?
const [editing, setEditing] = useState(false);
const editingTraining = (id) => {
console.log("Editing works")
setEditing(!editing);
}
{trainingData.map((d, i) => (
<div key={i}>
{
editing === false && <button className="button is-info" onClick={() => editingTraining(d.trainingsid)}>Edit</button>
}
{
editing === true && <button className="button is-success" onClick={() => editingTraining(d.trainingsid)}>Save</button>
}
<br />
</div>
))}
解决方案
您应该存储正在编辑的条目。例如,通过使用trainingsid
属性 liko 这样:
const [editing, setEditing] = useState(null);
const editingTraining = (id) => {
setEditing(id);
};
return (
<div>
{trainingData.map((d, i) => (
<div key={i}>
{editing === d.traningsid ? (
<button className="button is-success" onClick={() => editingTraining(null)}>Save</button>
) : (
<button className="button is-info" onClick={() => editingTraining(d.trainingsid)}>Edit</button>
)}
<br />
</div>
))}
</div>
);
推荐阅读
- python - 如何使用画布比例在 kivy for python 中缩放不同的不同对象?
- java - *.cpp 类代表 JVM 中的 java.lang.Object
- angular - 角反应形式设置值
- java - 如何将包含反斜杠 (\) 的用户名传递给 jcifs smb?
- node.js - Heroku 应用程序在本地工作,但在部署时不工作
- android - 将 chromium android 构建为库 [android aar archive]
- html - 为什么 Webkit 和 Gecko 的动画行为不同?
- r - 合并/合并/合并 ONE 数据集中的两列忽略 NA
- c# - 无法在 C# 中序列化数组对象
- sql - 在 powershell 中调用-SQLCMD