通过数组映射时反应设置特定的输入形式
React setting specific input forms when mapping through array
所以我从 api 中获取了一堆学生数据并通过它进行映射,按照常见的反应实践在 div 中显示学生信息。
我想添加一个文本输入字段,以便能够将 tags/comments 添加到学生的每个实例。代码看起来像这样
<form onSubmit={(e) => handleSubmit(e, i)}>
<input
type='text'
placeholder='Add a tag'
className='tag__input'
value={tag}
onChange={(e) => setTag(e.target.value)}
/>
</form>
const [tag, setTag] 只是一个 useState,保存我要添加的评论的字符串值。
预计这不会像我需要的那样工作,因为我所有输入字段的值都在变化,而我只需要根据我需要为哪个学生发表评论来更改一个特定的字段。设置此逻辑的下一步是什么?谢谢!
您应该为学生信息和输入创建单独的组件,并将 useState 放入该组件中。
现在所有字段都有 1 个状态。
UPD,类似于
function StudentEntry({ data, onSubmit }) {
// one state per entry
const [tag, setTag] = React.useState('')
return (<>
<StudentInfo {...data} />
<form onSubmit={(e) => onSubmit(e, data.id)}>
<input
type='text'
placeholder='Add a tag'
className='tag__input'
value={tag}
onChange={(e) => setTag(e.target.value)}
/>
</form>
</>
}
// and use somewhere
{studentsData.map(data =>
<StudentEntry data={data} key={data.id} onSubmit={handleSubmit} />
)}
所以我从 api 中获取了一堆学生数据并通过它进行映射,按照常见的反应实践在 div 中显示学生信息。 我想添加一个文本输入字段,以便能够将 tags/comments 添加到学生的每个实例。代码看起来像这样
<form onSubmit={(e) => handleSubmit(e, i)}>
<input
type='text'
placeholder='Add a tag'
className='tag__input'
value={tag}
onChange={(e) => setTag(e.target.value)}
/>
</form>
const [tag, setTag] 只是一个 useState,保存我要添加的评论的字符串值。 预计这不会像我需要的那样工作,因为我所有输入字段的值都在变化,而我只需要根据我需要为哪个学生发表评论来更改一个特定的字段。设置此逻辑的下一步是什么?谢谢!
您应该为学生信息和输入创建单独的组件,并将 useState 放入该组件中。
现在所有字段都有 1 个状态。
UPD,类似于
function StudentEntry({ data, onSubmit }) {
// one state per entry
const [tag, setTag] = React.useState('')
return (<>
<StudentInfo {...data} />
<form onSubmit={(e) => onSubmit(e, data.id)}>
<input
type='text'
placeholder='Add a tag'
className='tag__input'
value={tag}
onChange={(e) => setTag(e.target.value)}
/>
</form>
</>
}
// and use somewhere
{studentsData.map(data =>
<StudentEntry data={data} key={data.id} onSubmit={handleSubmit} />
)}