我一直在尝试在浏览器中显示来自口袋妖怪API的数据,特别是体重、身高、名字和精灵的数据。
不幸的是,当我试图Map它时,我总是得到一个错误。有人能告诉我如何做到这一点吗?我做错了什么?有人能教我怎么做吗?”
这是我的代码:
import React from "react";
import { useGetPokemonByNameQuery } from "../Api/pokemonApi";
function PokemonCard() {
const { data, error, isLoading, isError } = useGetPokemonByNameQuery();
console.log(data)
return (
<>
<ul>
{isLoading && '...Loading...'}
{isError && error.message}
{data.map((pokemon) => (
<li key={pokemon.id}>{pokemon.name}</li>
))}
</ul>
</>
);
}
export default PokemonCard;
const pokemonApi = createApi({
reducerPath: "pokemonApi",
baseQuery: fetchBaseQuery({
baseUrl: "https://pokeapi.co/api/v2/",
}),
endpoints: (builder) => ({
getPokemonByName: builder.query({
query: () => `/pokemon`,
}),
}),
});
export const { useGetPokemonByNameQuery } = pokemonApi;
export default pokemonApi;
import { configureStore } from "@reduxjs/toolkit";
import { setupListeners } from "@reduxjs/toolkit/query";
import pokemonApi from '../Api/pokemonApi';
export const store = configureStore({
reducer: {
[pokemonApi.reducerPath]: pokemonApi.reducer
},
middleware: (getDefaultMiddleware) => {
return getDefaultMiddleware().concat(pokemonApi.middleware);
}
});
setupListeners(store.dispatch);
import pokemonApi from './Api/pokemonApi'
import { ApiProvider } from '@reduxjs/toolkit/query/react';
import PokemonCard from './Components/PokemonCard';
function App() {
return (
<ApiProvider api={pokemonApi}>
<div className="App">
<h1>Pokemon</h1>
<PokemonCard />
</div>
</ApiProvider>
);
}
export default App;
2条答案
按热度按时间oknrviil1#
问题
results
属性的数组对象。data
,直到数据被获取和缓存。UI应该通过在任何data
属性上使用空检查/保护子句或通过使用查询状态标志来解决这个问题,例如isSuccess
、isError
等,以了解何时/是否有数据要渲染。解决方案
简单的解决方案是在返回的
data
属性上使用空检查来访问results
数组,例如。data?.results.map
。另一个简单的解决方案是转换响应。在获取和缓存任何数据之前,
data
仍然会有同样的问题。Demo
biswetbf2#
尝试使用react query调用您的API,从API获取数据,然后将数据转换为JSON对象,如下所示: