我不知道该怎么做,我无法使用api数组更新状态,如果我将其投入使用,则出现错误原因是我没有发送任何数据,请帮助我。时间使用stackoverflow
import React, { useEffect, useState } from "react";
import getTeam from "../Helpers/getTeam";
const selectTeams = [
"Barcelona",
"Real Madrid",
"Juventus",
"Milan",
"Liverpool",
"Arsenal",
];
const Select = () => {
const [team, setTeam] = useState(null);
const [loading, setLoading] = useState(null);
const handleOption = async (e) => {
setLoading(true);
let teamsJson = await getTeam(e.target.value);
let arr = [];
Object.keys(teamsJson).map((teamjs, i) => {
return arr.push(teamsJson[teamjs]);
});
console.log(arr);
console.log(team);
setTeam(arr);
setLoading(false);
};
return (
<div
style={{ background: "skyblue", textAlign: "center", padding: "20px" }}
>
<h1>Equipos Disponibles</h1>
<div>
<select onChange={handleOption}>
<option>Elige tu equipo</option>
{selectTeams.map((selectTeam, i) => {
return <option key={i}>{selectTeam}</option>;
})}
</select>
</div>
{loading ? <h1>suave</h1> : (
team !== null ? (
team.map((newTeam, i) => {
return (
<div>
the items are here
</div>
)
})
) : null
)}
</div>
);
};
export default Select;
我让你的我的api文件下来
const getTeam = async (teamName) => {
const url = `https://www.thesportsdb.com/api/v1/json/1/searchteams.php?t=${teamName}`;
const res = await fetch(url);
const team = await res.json();
return team;
};
export default getTeam;
我想通过api调用的响应来更新我的const团队,但是它不会更新它,我不知道该怎么做,请帮助我
答案 0 :(得分:1)
teamsJson
值是具有单个键和某个数组值的对象
{ teams: [...] }
因此,当您将值推入另一个数组时,您正在使用嵌套数组更新状态。
let arr = [];
Object.keys(teamsJson).map((teamjs, i) => {
return arr.push(teamsJson[teamjs]);
});
根据您要映射team
状态数组的方式,我假设您只需要teamJson
的原始内部数组。
const { teams } = await getTeam(e.target.value);
setTeam(teams);
然后,在进行映射时,您可以访问所需的任何属性。
team.map((newTeam, i) => {
return <div key={i}>{newTeam.idTeam}</div>;
})
答案 1 :(得分:0)
我刚刚对其进行了测试,并且看起来效果很好。
唯一的两个问题似乎是:
team
语句之外,您都不会在任何地方使用console.log
。console.log(team);
时,常量team
将会(但)还是第一次null
(因为它仍然保持初始状态)。这是我在<select>
中随机挑选一支球队后在React dev tools中看到的内容: