【发布时间】:2021-06-11 03:38:16
【问题描述】:
我是第一次使用打字稿。我做了两个页面,详细页面正在获取口袋妖怪的所有详细信息。但是当我想进去的时候,我不能进去。以下是我设置状态口袋妖怪的方法。接口
export interface IState {
id: string;
url: string;
pokemon: [];
}
我正在获取数据并通过以下代码将其添加到状态
public componentDidMount(): void {
axios
.get(`https://pokeapi.co/api/v2/pokemon/${this.state.id}`)
.then((data) => {
this.setState({ pokemon: data.data });
});
}
下面是我的 json 回来了
{
"abilities": [
{
"ability": {
"name": "static",
"url": "https://pokeapi.co/api/v2/ability/9/"
},
"is_hidden": false,
"slot": 1
},
{
"ability": {
"name": "lightning-rod",
"url": "https://pokeapi.co/api/v2/ability/31/"
},
"is_hidden": true,
"slot": 3
}
],
"base_experience": 112
}
我可以通过在组件中使用以下代码轻松访问 base_experience
Experience Index: {this.state.pokemon.base_experience}
但我想访问能力并使用以下代码但出现错误
{this.state.pokemon['abilities'].map((ability)=>(
<p>{ability['ability']['name']}</p>
))}
我也使用了以下,但它也给出了同样的错误
{this.state.pokemon.abilities.map((ability)=>(
<p>{ability['ability']['name']}</p>
))}
还尝试通过添加类型 ability: any 但仍然无法正常工作,并且还在 tsconfig.json 中更改为 "noImplicitAny": false 但仍然没有运气。我收到以下错误
TypeError: Cannot read property 'map' of undefined
但是当我做控制台它显示列表时它是列表。
我知道这是重复的问题,我已经看到了近 10 个答案,但无法解决。如果我这样做 console.log(this.state.pokemon['abilities'] 它会打印带有名称和 url 的整个数组。但是当我尝试映射时,它并没有这样做。
【问题讨论】:
-
你得到哪个错误?
-
TypeError: 无法读取
this.state.pokemon['abilities'].map和this.state.pokemon.abilities.map的未定义属性“映射” -
您现在已将“pokemon”的类型更改为数组。它不是一个数组,而是一个对象
标签: reactjs typescript state