javascript - 如何从 API 获取数据,然后在完全加载后将其传递给另一个组件?
问题描述
我正在从 pokeApi 获取数据,然后将其传递给另一个组件。
componentDidMount() {
fetch("https://pokeapi.co/api/v2/pokemon/")
.then(resp => resp.json())
.then(items =>{
//console.log(items.results);
items.results.forEach( item => {
this.setState({pokemon:[...this.state.pokemon,item.name]})
this.setState({url:[...this.state.url,item.url]})
})});
}
render (){
return (
<div>
<Fetchpokemon data={this.state}/>
</div>
)
}
当我控制台登录 Fetchpokemon 组件时,检索数据正在显示和更新。我只想显示一次数据。例如。它应该在 App.js 中完全加载,然后将数据发送到另一个组件。
解决方案
你可以做这样的事情。添加状态变量名称加载并显示加载器,直到数据加载。然后我们渲染组件以显示数据。我还简化了数据加载逻辑,只调用一次 setState。
constructor() {
this.state = {
// Your initial state
loading: true,
}
}
componentDidMount() {
fetch("https://pokeapi.co/api/v2/pokemon/")
.then(resp => resp.json())
.then(items => {
const pokemon = [];
const url = [];
items.results.forEach(item => {
pokemon.push(item.name);
url.push(item.url);
});
this.setState({ pokemon, url, loading: false });
});
}
render (){
if (loading) {
return <Loader />;
}
return (
<div>
<Fetchpokemon data={this.state}/>
</div>
);
}
推荐阅读
- rust - 非复制或克隆的全局常量如何在 Rust 中工作?
- express - 将 Url 参数转换为对象 id
- c - hiredis redisCommand 为 Raspberry Pi 4 上的所有内容返回 null
- flutter - Flutter 强制更高的包依赖版本
- python - 为什么我不能运行只有打印功能的 .py 文件?
- keras - “ValueError:输入 0 与层 conv1d_1 不兼容:预期 ndim=3,发现 ndim=4”
- c# - 在 Unity 的 ScriptableObject 中序列化脚本实例
- c# - 使用 .NET Core 和抽象(基)类进行依赖注入
- reactjs - 我在反应原生时以错误的方式获取 api
- javascript - 使 html 页面的某些部分不可滚动且不可见