我将在ul文本单击到inputText并使Editable成为可能(这意味着按钮更改为保存以进行编辑)。 除非直接单击其他项目,否则它将被切换。
因此,我尝试通过传递的函数从onClick方法获取ID,然后从setState获取。
在状态下使用id比较单击的ID,如果相等,则将切换showEdit状态。然后编辑按钮以保存按钮。
如果单击其他项,因此id不相等,则其他项名称将进入输入字段。
第一次,单击条目将其加载到输入字段中。
但是问题是如果单击了某个项目,然后又单击了另一个项目,则该按钮已切换,并且输入进行了...
您如何看待我的情况。
这是我的代码
列表组件
const { facils, fetchData } = useDB();
const [id, setId] = useState([]);
const [name, setName] = useState([]);
const [showEdit, setShowEdit] = useState(false);
const fieldHandler = (id, name) => {
setId(id);
setName(name);
};
const handleChange = (e) => {
setName(e.target.value);
};
const handleEdit = (id) => {
console.log("selected id: ", id);
facils.map((item) => {
if (item.id !== id) {
setShowEdit(!showEdit);
}
return item;
});
};
return (
facils.map((item) => (
<Items
key={item.id}
items={item}
fieldHandle={() => fieldHandler(item.id, item.name)}
handleEdit={() => handleEdit(id)}
/>
...
...
{showEdit ? (
<EditField
id={id}
name={name}
handleEdit={() => handleEdit()}
handleChange={handleChange}
refreshData={() => fetchData()}
/>
) : (
<CreateField refreshData={() => fetchData()} />
项目组成
const Items = (props) => {
const { items, fieldHandle, handleEdit } = props;
return (
<div>
<ul
key={items.id}
onClick={() => {
fieldHandle(items.id, items.name);
handleEdit(items.id);
}}
>
{items.id} - {items.name}
</ul>
</div>
EditField组件
const { id, name, handleChange, handleEdit, refreshData } = props;
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
</div>