【发布时间】:2019-04-27 23:21:10
【问题描述】:
我是 React/在项目中使用 API json 数据的新手,所以我遇到了一些麻烦。我创建了一个功能,用户可以在其中输入搜索查询,然后将显示与其查询关联的设备列表。这些设备名称是从 API 中获取的。我正在尝试这样做,以便在单击设备旁边的加号时,将此设备添加到一个新数组中,然后显示在屏幕上。
我不是 100% 熟悉 React 中的状态概念,我认为这就是我的问题所在(在 addDevice 函数中)。它部分工作,我单击设备并显示在底部,但是当我单击另一个设备时,它不会添加到列表中,而是替换第一个设备。
class App extends React.Component {
state = {
search: "",
devices: [],
bag: []
};
addDevice = (e, data) => {
console.log(data);
const newData = [this.state.devices.title];
this.setState({
bag: newData.concat(data)
});
};
onChange = e => {
const { value } = e.target;
this.setState({
search: value
});
this.search(value);
};
search = search => {
const url = `https://www.ifixit.com/api/2.0/suggest/${search}?doctypes=device`;
fetch(url)
.then(results => results.json())
.then(data => {
this.setState({ devices: data.results });
});
};
componentDidMount() {
this.search("");
}
render() {
return (
<div>
<form>
<input
type="text"
placeholder="Search for devices..."
onChange={this.onChange}
/>
{this.state.devices.map(device => (
<ul key={device.title}>
<p>
{device.title}{" "}
<i
className="fas fa-plus"
style={{ cursor: "pointer", color: "green" }}
onClick={e => this.addDevice(e, device.title)}
/>
</p>
</ul>
))}
</form>
<p>{this.state.bag}</p>
</div>
);
}
}
我希望它显示我一个接一个点击的所有设备,但现在每个点击的设备只是替换前一个点击的设备
【问题讨论】:
标签: javascript arrays json reactjs fetch