javascript - 如何转换成反应中的点击
问题描述
我想在点击时转换<td>MyData</td>
为. 当我单击时,我有完整行的 id。实际上我想在我的代码中添加编辑功能。每当我单击编辑时,它应该将所有输入字段更改为可以更改的输入字段。以下是我的代码。<input value="MyData" />
<td>Edit</td>
<td>Edit</td>
<td>MyData</td>
function ManagerGrid(props)
{
function handleClick(value)
{
console.log(value)
}
const listItems = props.tasks.map((task)=>
{
return(
<tr key={task._id}>
<td>{task._id}</td>
<td>{task.title}</td>
<td>{task.detail}</td>
<td>{task.assignee}</td>
<td>{task.time}</td>
<td onClick={(e)=>{handleClick(task._id)}}>Edit</td>
</tr>
)
})
return(
<table id="myTable">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Detail</th>
<th>Assignee</th>
<th>Time</th>
</tr>
</thead>
<tbody>
{listItems}
</tbody>
</table>
)
}
解决方案
您的渲染代码需要根据其当前状态进行更改,即编辑或不编辑。你需要一个 isEditing 状态。这是一个示例,您必须弄清楚如何保存更改。这是基于钩子的,但您也可以将它与您的道具一起传递并在父组件中跟踪它。
function ManagerGrid(props)
{
const [editingId, setEditingId] = useState(-1)
function handleClick(value)
{
setEditingId(value)
// TODO: cancel or save edits
}
const listItems = props.tasks.map((task)=>
{
if (editingId === task._id) {
return(
<tr key={task._id}>
<td><input value={task._id} /></td>
<td><input value={task.title} /></td>
<td><input value={task.detail} /></td>
<td><input value={task.assignee} /></td>
<td><input value={task.time} /></td>
<td onClick={(e)=>{handleSave(/*TODO*/)}}>Save</td>
</tr>)
else {
return (<tr key={task._id}>
<td>{task._id}</td>
<td>{task.title}</td>
<td>{task.detail}</td>
<td>{task.assignee}</td>
<td>{task.time}</td>
<td onClick={(e)=>{handleClick(task._id)}}>Edit</td>
</tr>)
}
})
return(
<table id="myTable">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Detail</th>
<th>Assignee</th>
<th>Time</th>
</tr>
</thead>
<tbody>
{listItems}
</tbody>
</table>
)
}
推荐阅读
- python - 使用python提取zip文件
- python - 使用 pathlib 递归遍历所有子目录
- javascript - 引导警报 - JS 脚本功能不起作用
- mysql - 计数(*)+分组+拥有
- android - 无法解析方法 Placepicker.getPlace(上下文,意图)
- python - python源代码的入口点是什么
- php - CakePHP webroot 和 tmp 文件夹被黑
- vba - 将用户表单添加到顶部阅读窗格
- php - 将值从 php 脚本传递到 python 脚本
- knockout.js - 淘汰赛:为什么我的计算函数会自动将项目推送到我的可观察数组中?