【发布时间】:2021-09-04 05:30:07
【问题描述】:
对 React 完全陌生,我正在构建一个基于 Pokeapi 的小型 Pokedex。我能够获取 Pokemon 及其相应的数据,并成功渲染它。
我有一个下拉菜单,用户可以在其中选择口袋妖怪范围(开始和结束编号),口袋妖怪列表应该会自动更新。问题是,先前的范围没有被清除,并且当前范围与先前的范围相加。但是当我允许一个范围内的所有口袋妖怪完全加载并选择第二个范围时,我没有遇到这个错误。在范围之间快速切换会导致此错误。代码如下:sn-ps。
当我选择一个下拉项时,所有Pokemons 都被设置为空,但渲染中并没有反映出来
GIF 演示我的问题:Pokedex error
代码沙盒链接:here
状态:
constructor(props) {
super(props);
this.state = {
allPokemons: [],
limit: 151,
offset: 0,
regions: [
{
name: "Kanto",
limit: 151,
offset: 0,
},
{
name: "Johto",
limit: 100,
offset: 151,
},
]
}
}
获取口袋妖怪列表及对应数据:
getAllPokemons = async () => {
const response = await axios.get(`https://pokeapi.co/api/v2/pokemon?limit=${this.state.limit}&offset=${this.state.offset}`).catch((err) => console.log("Error:", err));
this.getPokemonData(response.data.results);
}
getPokemonData = async (result) => {
this.setState({
allPokemons : [],
})
var response;
for (var i = 0; i < result.length; i++) {
response = await axios.get(`https://pokeapi.co/api/v2/pokemon/${result[i].name}`).catch((err) => console.log("Error:", err));
this.setState({
allPokemons: [...this.state.allPokemons,response.data],
})
}
}
下拉句柄更改功能
handleChangeRegions = (event) => {
this.setState({
allPokemons : [],
})
for (var i = 0; i < this.state.regions.length; i++) {
if (this.state.regions[i].name === event.target.value) {
this.setState({
limit : this.state.regions[i].limit,
offset : this.state.regions[i].offset,
allPokemons : [],
},()=>{
this.getAllPokemons();
})
break;
}
}
}
渲染组件
Object.keys(this.state.allPokemons).map((item, index) =>
<Pokemon
key={index}
id={this.state.allPokemons[item].id}
name={this.state.allPokemons[item].name}
type={this.state.allPokemons[item].types}
/>
)
下拉组件
<select value={this.state.valueregion} onChange={this.handleChangeRegions}>
{this.state.regions.map((region) => (
<option value={region.name}>{region.name} ({region.offset + 1}-{region.limit + region.offset})</option>
))}
</select>
我需要知道这个问题的原因,非常感谢您的解决方案!
【问题讨论】:
-
您已将选择值设置为 this.state.valueregion,但未在构造函数中设置;那应该是什么?无论如何,如果您制作一个可重现的 sn-p 并在完成后 ping 我,我可以更深入地了解并找出罪魁祸首
-
@ale917k,我添加了一个codeandbox sn-p,供您参考
标签: javascript reactjs react-component react-state react-state-management