【发布时间】:2021-10-31 08:26:50
【问题描述】:
我正在使用 gitbeaker 从 gitlab API 获取项目,在获取项目后,我使用 useState 保存项目对象,现在我想获取另一个 API,其 URL 在该对象中,但每当我尝试访问该对象时URL,出现错误“无法读取未定义的属性'问题'”。 这是我的代码:
const [project, setProject] = useState<any>({});
const api = new Gitlab({
host: "https://example.com",
token: "my token",
});
useEffect(() => {
(async () => {
const projectsPromises = await api.Projects.all().then((allprojects) => {
return allprojects;
});
Promise.all(projectsPromises).then((data) => {
setProject(data.find((element) => element.id === 338));
});
})();
return () => {};
}, []);
console.log(project);
console.log(project._links.issues);
fetch(project._links.issues).then((res) => console.log(res));
console.log(项目);给我 {} 并在一段时间后打印对象,这就是为什么当我尝试使用 project._links.issues 它是未定义的,因为我认为它尚未解决但我不知道如何使它工作。
我解决了这个问题在 useEffect 钩子中获取数据并将 api 的响应保存在 state 中,以便稍后在我的代码中访问它,就像那样
const [issues, setIssues] = useState<any>([]);
Promise.all(projectsPromises).then((data) => {
const celoProject: any = data.find((element) => element.id === 338);
setProject(celoProject);
const projectIssues = fetch(celoProject._links.issues)
.then((res) => res.json())
.then((allIssues) => {
setIssues(allIssues);
});
});
如果有人有更好的方法或解释为什么我无法在 useEffect 之外访问它,请告诉我。
【问题讨论】:
标签: reactjs es6-promise use-effect use-state gitlab-api