diff --git a/src/pages/Characters.tsx b/src/pages/Characters.tsx index 632e899..00f5f30 100644 --- a/src/pages/Characters.tsx +++ b/src/pages/Characters.tsx @@ -82,18 +82,24 @@ const Characters: React.FC = () => { const [selectedRole, setSelectedRole] = useState("all"); const [searchTerm, setSearchTerm] = useState(""); const [heroes, setHeroes] = useState([]); + const [loading, setLoading] = useState(true); const navigate = useNavigate(); // 拉取英雄数据 useEffect(() => { - EpicApi.getHeroList().then(data => { - // console.log('Heroes:', data); - // 类型转换,假设 API 返回的数据包含所需的所有属性 - const extendedData = data as ExtendedHero[]; - setHeroes(extendedData); - setAllHeroes(extendedData); - }); + setLoading(true); + EpicApi.getHeroList() + .then(data => { + const extendedData = data as ExtendedHero[]; + setHeroes(extendedData); + setAllHeroes(extendedData); + }) + .catch(() => { + setHeroes([]); + setAllHeroes([]); + }) + .finally(() => setLoading(false)); }, []); // 过滤逻辑 @@ -202,56 +208,63 @@ const Characters: React.FC = () => { - {filteredHeroes.length > 0 ? ( -
- {filteredHeroes.map((hero) => ( -
navigate(`/character/${hero.heroCode}`)} - > - {/* 头像+attr */} -
- {hero.heroName} -
- {getElementIcon(hero.attribute)} -
-
- {/* 右侧信息 */} -
-
- {hero.heroName} -
-
- {renderStars(hero.stars)} -
-
- {hero.role && ( - <> - - {hero.role} - - {ROLE_LABELS[hero.role] || hero.role} - - )} -
-
-
- ))} + {loading ? ( +
+ +
加载中...
) : ( -
-
- 暂无匹配的角色数据 + filteredHeroes.length > 0 ? ( +
+ {filteredHeroes.map((hero) => ( +
navigate(`/character/${hero.heroCode}`)} + > + {/* 头像+attr */} +
+ {hero.heroName} +
+ {getElementIcon(hero.attribute)} +
+
+ {/* 右侧信息 */} +
+
+ {hero.heroName} +
+
+ {renderStars(hero.stars)} +
+
+ {hero.role && ( + <> + + {hero.role} + + {ROLE_LABELS[hero.role] || hero.role} + + )} +
+
+
+ ))}
-
- 请尝试调整搜索条件或筛选条件 + ) : ( +
+
+ 暂无匹配的角色数据 +
+
+ 请尝试调整搜索条件或筛选条件 +
-
+ ) )}