首先我有这个addNameId方法
addNameId(event) {
event.preventDefault();
var data = this.props.data;
data.push({name:this.props.name, id: this.props.id})
this.props.setData(data);
}
在调用removeData
之前,一切都很好removeData(key) {
console.log(key);
const data = {...this.state.data};
delete data[key];
this.setState({ data });
}
一旦我调用removeData,我就再也无法为数据添加任何内容。
这就是我称之为
的地方 renderData(key){
if (!this.props.data[key]) return null;
const user = this.props.data[key] || {};
console.log(user.name);
console.log(user.id);
return(
<div key={key}>
<li> <strong> Name: </strong> {user.name},
<strong> ID: </strong> {user.id} </li>
<button onClick={() => this.props.removeData(key)}> Remove </button>
</div>
)
}
我可以用{<1}}取代什么?
编辑:
我的构造函数
data.push({name:this.props.name, id: this.props.id})
答案 0 :(得分:0)
您需要纠正的一些事情。
addNameId
函数中指定var data = this.props.data;
,但只为{}设置data
的引用,因此您可以直接改变道具更改为
addNameId(event) {
event.preventDefault();
var data = [..this.props.data];
data.push({name:this.props.name, id: this.props.id})
this.props.setData(data);
}
您正在this.state.data
removeData
中const data = {...this.state.data};
创建一个新的对象。它的作用是它在this.state.data
内解构内容并改为创建一个对象。由于this.state.data
是一个数组,您应该已完成const data = [...this.state.data];
delete从对象中删除一个键,当您使用数组时,可以使用splice
删除index
等于key
的对象,如data.splice(key, 1)
}
将功能更改为
removeData(key) {
console.log(key);
const data = [...this.state.data];
data.splice(key, 1);
this.setState({ data });
}