【发布时间】:2020-11-03 11:51:28
【问题描述】:
我正在尝试在可用项目数组中更改我的项目名称的input value:-
// lets say i've projects like so
const projects = [
{ _id: 1, name: 'Project 1' },
{ _id: 2, name: 'Project 2' },
{ _id: 3, name: 'Project 3' }
]
const Projects = () = {
// declaration of state
const [projectName, setProjectName] = useState('')
const [projectId, setProjectId] = useState('')
const [isSubmit, setIsSubmit] = useState(false)
// handle submission of updated input
useEffect(() => {
(async() => {
if(isSubmit) {
// do fetch post submission to server
// reset everything back
setProjectName('')
setIsSubmit(false)
}
})();
}, [isSubmit])
return (
<>
<table>
<thead>
<tr>
<th>Name</th>
<th>Submission</th>
</tr>
</thead>
<tbody>
<tr>
{projects && projects.map(project => (
<form
key={project._id}
onSubmit={(e) => {
e.preventDefault()
setProjectId(project._id)
setIsSubmit(true)
}}
>
<td>
<TextField
required
label="Name"
value={project.name}
onChange={(e) => setProjectName(e.target.value)}
/>
</td>
<td>
<Button type="submit">Update</Button>
</td>
</form>
))}
</tr>
</tbody>
</table>
</>
)
}
不幸的是,由于value={project.name},onChange 事件在这种情况下基本上不会起作用。
顺便说一句,这也将引入新问题,以下数组的所有input TextField 也将被更新。
如何使用 React 实现这一目标?使用 Vanilla JavaScript 执行此操作要简单得多。不知道如何使用 React 来实现这一点。还是不推荐这种方式?相反,我应该创建一个Modal 或者可以单独处理项目名称更改的东西?
我的目标是从表本身启用直接更新。
【问题讨论】:
标签: javascript arrays reactjs input material-ui