javascript - 从行中删除下拉列表和文本字段会删除 ReactJS 中状态更改的不正确字段
问题描述
我有一行包含一个 React-Select Dropdown 和一个输入字段。我正在尝试按其索引删除特定行。我在我的处理函数中传递索引,并希望从行中删除这两个字段。输入字段已正确删除,但下拉值未从同一行中删除,它会从最后一个索引中删除下拉列表。
我在这个处理程序中的索引的帮助下删除了行
按索引删除行:
handleRemoveSocial(idx) {
let someArray = this.state.SocialData;
someArray.splice(idx, 1);
this.setState({ SocialData: someArray });
}
我在 map 方法的帮助下渲染 Select Dropdown 和 Textbox,映射到我所在州的数组。现在,当我删除文本框时,如何从同一行映射 Select 下拉值。我在这篇文章中包含了沙盒链接。
{this.state.SocialData.map((Social, idx) => (
<div className="form-group" key={idx}>
<label htmlFor={"socialprofile"} className="control-label">
Social profile
</label>
<div className="form-input-container select-social-link">
<Select
data-id={idx}
className="profile-module-select-container"
classNamePrefix="profile-module-select"
options={options}
onChange={(selected) => {
this.handleSocialNameChange(selected.value, idx);
}}
onMenuOpen={() => {
this.setState({
selectMenuOpen: true
});
}}
onMenuClose={() => {
this.setState({
selectMenuOpen: false
});
}}
components={{
IndicatorSeparator: () => null
}}
placeholder={"Select"}
isSearchable={false}
isClearable={false}
/>
</div>
<div className="form-input-container input-social-link">
<input
type="text"
id={`${SocialData[idx].socialname}-${idx}`}
className="social-form-control"
placeholder={`Social Url - ${Social.socialname}`}
value={SocialData[idx].name}
onChange={(e) =>
this.handleInputVlaueChange(e.target.value, idx)
}
/>
解决方案
这是在此处触发事件handleSocialNameChange()
时在 Handler中发生问题的地方。change
onChange={(selected) => {
this.handleSocialNameChange(selected.value, idx);
}}
使用索引作为 id 总体上不是一个好主意。因为他们后来把事情搞砸了,我们还必须在代码中添加额外的逻辑。
我们可以有效地为我们的 ID使用uuid()
库或技巧。new Date().getTime().toString()
CODESANDBOX Link的工作代码:
https://codesandbox.io/s/reasontosmile-n6ww4?file=/src/App.js
享受 :)
推荐阅读
- vue.js - 设计:共享相似 Sass 的两个 Vue 组件
- javascript - Vue 在向数组添加非顺序索引时不断添加未定义的值?
- java - 使用具有不同参数和时间的方法的大 O 表示法
- php - Woocommerce - 检查产品是否创建时间少于 60 天
- python-3.x - 向文件添加行号和冒号
- javascript - Phaser:如何使用 json 文件显示另一张地图?
- python - Python多维数组值赋值工作意外
- database - 使用 Flutter 在 Firestore 中保存多行文本
- r - 如何将数据从一个级别移动到另一个级别
- javascript - ev.target.id 不返回元素 id