【发布时间】:2019-09-17 01:41:52
【问题描述】:
我不确定我是否正确使用过滤器函数从数组中删除元素。我想设置它,所以当我点击元素时,它会删除元素。但是,目前它正在删除所有元素,而不仅仅是一个。元素来自点击屏幕上显示的项目(这些项目来自 API)
class App extends React.Component {
state = {
query: "",
contacts: [],
names: []
};
addName = (e, name) => {
this.setState(prevState => ({
names: [...prevState.names, name]
}));
};
这就是它搞砸的地方。我不知道为什么当我点击一个名字时它会删除所有的名字
removeName = (e, name) => {
this.setState(prevState => ({
names: prevState.names.filter(n => n.name !== name)
}));
};
onChange = e => {
const { value } = e.target;
this.setState({
query: value
});
this.query(value);
};
query = query => {
const url = ("https://jsonplaceholder.typicode.com/users");
fetch(url)
.then(response => response.json())
.then(data => {
this.setState({ contacts: data.response });
});
};
componentDidMount() {
this.query("");
}
render() {
return (
<div>
<form>
<input
type="text"
placeholder="Type names to add"
onChange={this.onChange}
/>
{this.state.contacts.map(contact => (
<div key={contact.name}>
<p>
{contact.name}{" "}
<button
onClick={e => this.addName(e, contact.name)}> Add
</button>
</p>
</div>
))}
</form>
{this.state.names.map(name => (
<p key={name.name}>
{name}{" "}
<button
onClick={e => this.removeName(e, name.name)}>
</button>
</p>
))}
</div>
);
}
}
【问题讨论】:
-
您是否尝试在
setState之前记录name? -
嗯,当我使用 console.log(name) 时,它显示为未定义
标签: javascript arrays reactjs filter