我有使用 React 的经验,但我对使用 Hooks 很陌生。我正在开发一个从 NHL API 检索统计数据的项目。我正在建立一个网站,允许用户按团队查看曲棍球统计数据。我设置了我的项目,React-Router
以便每个团队的统计页面是团队名称,即/rangers
纽约游骑兵队页面,/capitals
华盛顿首都页面等等......
NHL API 的球队统计数据端点如下所示https://statsapi.web.nhl.com/api/v1/teams/3/roster
。后面的数字teams
代表您要搜索的团队。3
在此查询中表示纽约游骑兵队端点。我创建了一个对象来存储 API 请求的团队名称及其相关编号,如下所示:
const teams = {
devils: {
id: 1
},
islanders: {
id: 2
},
rangers: {
id: 3
}
}
我计划使用useLocation从 URL 中获取团队名称,在上面的对象中查找它的关联编号,然后将该编号传递给axios
获取请求 URL 以检索该团队的统计信息。
例如,用户/islanders
在我的项目中访问 Islanders 页面,然后我使用从 URLuseLocation
中抓取/islanders
,然后在对象中查找 Islanders ID 并找到2
. 然后我想将GET传递2
给这样的请求:axios
const [data, setData] = useState([]);
useEffect(() => {
axios.get(`https://statsapi.web.nhl.com/api/v1/teams/${teamID}/roster`)
.then(res => {
setData(res.data.roster);
console.log(res);
})
.catch(err => {
console.log('Error : ' + err);
})
}, []);
如何将teamID
变量传递给axios
请求?我尝试了以下方法:
const [data, setData] = useState([]);
const classes = useStyles();
// Get URL from team page user is on
const location = useLocation();
// '/islanders'
const teamWithSlash = location.pathname;
// Removes / '/islanders' becomes 'islanders'
const team = teamWithSlash.slice(1, teamWithSlash.length);
useEffect((team) => {
axios.get(`https://statsapi.web.nhl.com/api/v1/teams/${teams.${team}.id}/roster`)
.then(res => {
setData(res.data.roster);
console.log(res);
})
.catch(err => {
console.log('Error : ' + err);
})
}, []);
我还尝试构建一个自定义 Hook,它允许我将teamID
参数传递给它,但我不知道如何使它工作。我可以访问需要传递给axios
请求的号码,但不知道如何将其动态传递给useEffect
.