arrays - 删除后 UI 重新呈现并获取所有复选框
问题描述
复选框和删除功能工作正常.. 删除后 UI 重新呈现并再次获得所有复选框.. 标记的复选框不应再次出现。请建议我如何阻止这种情况。单击删除按钮后,我不希望用户界面中的复选框。
import React,{Component} from 'react';
import './UserList.css';
import jsonData from '../../people_(5).json';
const list = jsonData.People
const list2 = list.map(v => {
return {
...v,
value: false
}
})
list2.forEach((obj,index)=>obj.id=index)
class UserList extends Component{
state={
userList: list2
};
handleChange = e => {
console.log(this.state.userList)
const id = e.target.id;
this.setState(prevState => {
return {
userList: prevState.userList.map(
li => (li.id === +id ? {...li,
value: !li.value
} : li)
)
};
});
};
handleClick = () => {
console.log(this.state.userList)
this.setState(prevState => {
return {
userList: prevState.userList.filter(li => !li.value)
};
});
};
render(){
return(
<form className="pa4">
<fieldset id="people" className="del bn">
<legend className="fw7 mb2">People<button onClick={this.handleClick}>Delete</button></legend>
{this.state.userList.map(e => (
<div key={e.id}>
<input
type="checkbox"
id={e.id}
checked={e.value}
onChange={this.handleChange}
/>
<label htmlFor={e.name}>{e.name}</label>
</div>
))}
</fieldset>
</form>
);
}
}
export default UserList
解决方案
我认为您放置按钮的位置不正确。每次单击表单元素内的按钮都会导致页面重新呈现,也许您可以像这样更改按钮位置
<div>
<form className="pa4">
<fieldset id="people" className="del bn">
...
</fieldset>
</form>
<button onClick={this.handleClick}>delete</button>
</div>
页面重新渲染后,people会被设置为初始值,所以handleChange实际上是不起作用的,所以不能删除对应的input元素。
推荐阅读
- react-native - 在 babel 构建阶段传递环境变量以导入不同的文件
- python - 当我将它放在簇图的顶部时,无法为每个条设置不同的颜色
- c# - 如何使用泛型类型约束来强制添加方法存在
- javascript - 纯 JS:将数据属性列表存储在数组中,然后迭代
- javascript - 使用 @keyframes 鼠标悬停时的 SVG 反向动画不起作用
- javascript - 为什么在js文件中用json声明变量而不是读取json?
- php - 无法使用 php 和 oci 选择“TEXT”列?
- c# - StreamReader.ReadLine() 非常奇怪的行为
- python - 如何在 python 列表中查找特定字符串,如果找到打印位置,否则打印 0
- java - 在世界的边缘转身