我试图在每次 onClick 发生后将状态重置为空对象
I am trying to reset the state to an empty object after every onClick occurs
我正在用 React 做一个项目。这个想法是,当您搜索艺术家时,将在 pg 上渲染 img。单击图像后,将呈现合作艺术家列表。然后,您可以单击一个名称并查看与艺术家合作的人。这是我的问题:不是每次单击新艺术家时状态 clearing/resetting,新艺术家只是添加到原始状态。有人可以帮我弄清楚如何清除状态,以便清除状态并 returns 一个新的协作者列表吗?坚持了几个小时。这是代码
searchForArtist(query) {
request.get(`https://api.spotify.com/v1/search?q=${query}&type=artist`)
.then((response) => {
const artist = response.body.artists.items[0];
const name = artist.name;
const id = artist.id;
const img_url = artist.images[0].url;
this.setState({
selectedArtist: {
name,
id,
img_url,
},
});
})
.then(() => {
this.getArtistAlbums();
})
.catch((err) => {
console.error(err);
});
}
getArtistCollabs() {
console.log('reached get artist collab function');
const { artistCounts } = this.state;
// console.log(artistCounts);
const artist = Object.keys(artistCounts).map((key) => {
//kate
const i = document.createElement("div");
i.innerHTML = key;
i.addEventListener('click', () => {
this.searchForArtist(key);
})
document.getElementById("collabs").appendChild(i);
});
this.setState({});
}
//kate
renderArtists() {
const artists = this.getArtistCollabs();
}
render() {
const img_url = this.state.selectedArtist.img_url;
return (
<div>
<form onSubmit={this.handleSubmit}>
<input type='text' name='searchInput' className="searchInput" placeholder="Artist" onChange={this.handleChange} />
<input type='submit' className="button" />
</form>
<img className="artist-img" src={this.state.selectedArtist.img_url}
// kate
onClick={this.renderArtists} alt="" />
<div id="collabs">
</div>
</div>
您的问题就在这里:
const artist = Object.keys(artistCounts).map((key) => {
//kate
const i = document.createElement("div");
i.innerHTML = key;
i.addEventListener('click', () => {
this.searchForArtist(key);
})
document.getElementById("collabs").appendChild(i);
您在这里所做的是手动创建 html 元素并将它们插入 dom。一旦发生这种情况,反应就无法控制这些新创建的元素。你应该只在绝对必要的时候像这样操作 DOM 。相反,您应该制作一个名为 <ArtistCollaborators
> 之类的新组件,它应该将艺术家作为道具,并使用其自己的渲染方法将此处的代码渲染到 DOM 中。
这将是 React 的做法,并允许 React 完全控制您渲染到 DOM 中的内容。
我正在用 React 做一个项目。这个想法是,当您搜索艺术家时,将在 pg 上渲染 img。单击图像后,将呈现合作艺术家列表。然后,您可以单击一个名称并查看与艺术家合作的人。这是我的问题:不是每次单击新艺术家时状态 clearing/resetting,新艺术家只是添加到原始状态。有人可以帮我弄清楚如何清除状态,以便清除状态并 returns 一个新的协作者列表吗?坚持了几个小时。这是代码
searchForArtist(query) {
request.get(`https://api.spotify.com/v1/search?q=${query}&type=artist`)
.then((response) => {
const artist = response.body.artists.items[0];
const name = artist.name;
const id = artist.id;
const img_url = artist.images[0].url;
this.setState({
selectedArtist: {
name,
id,
img_url,
},
});
})
.then(() => {
this.getArtistAlbums();
})
.catch((err) => {
console.error(err);
});
}
getArtistCollabs() {
console.log('reached get artist collab function');
const { artistCounts } = this.state;
// console.log(artistCounts);
const artist = Object.keys(artistCounts).map((key) => {
//kate
const i = document.createElement("div");
i.innerHTML = key;
i.addEventListener('click', () => {
this.searchForArtist(key);
})
document.getElementById("collabs").appendChild(i);
});
this.setState({});
}
//kate
renderArtists() {
const artists = this.getArtistCollabs();
}
render() {
const img_url = this.state.selectedArtist.img_url;
return (
<div>
<form onSubmit={this.handleSubmit}>
<input type='text' name='searchInput' className="searchInput" placeholder="Artist" onChange={this.handleChange} />
<input type='submit' className="button" />
</form>
<img className="artist-img" src={this.state.selectedArtist.img_url}
// kate
onClick={this.renderArtists} alt="" />
<div id="collabs">
</div>
</div>
您的问题就在这里:
const artist = Object.keys(artistCounts).map((key) => {
//kate
const i = document.createElement("div");
i.innerHTML = key;
i.addEventListener('click', () => {
this.searchForArtist(key);
})
document.getElementById("collabs").appendChild(i);
您在这里所做的是手动创建 html 元素并将它们插入 dom。一旦发生这种情况,反应就无法控制这些新创建的元素。你应该只在绝对必要的时候像这样操作 DOM 。相反,您应该制作一个名为 <ArtistCollaborators
> 之类的新组件,它应该将艺术家作为道具,并使用其自己的渲染方法将此处的代码渲染到 DOM 中。
这将是 React 的做法,并允许 React 完全控制您渲染到 DOM 中的内容。