我有一个应用程序,我试图在组件加载时发出网络请求,使用API调用设置项目ID,并通过zustand设置状态.此外,还有一些人呼吁收听网络插座升级,以使用结果更新前端的某些内容.
例如,
const Component = () => {
const { setProjectIdStorage } = useProjectStore();
const projectIdStorage = useProjectStore((state) => state.projectIdStorage);
useEffect(() => {
createProject();
}, []);
function createProject() {
BackendClient.post(
`projects`,
{ project_id: projectIdStorage },
{ headers: { "Content-Type": "application/json" } },
)
.then((response) => {
setProjectIdStorage(response.data.project.id);
})
.catch((err) => {
console.log("Failed to create project");
});
}
useEffect(() => {
socket.on("server_recommendation", onServerRecommendation);
socket.on("server_code", onServerCode);
return () => {
socket.disconnect();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const refreshProjectStates = (projectId: string | null) => {
BackendClient.post(
`projects/project_state`,
{ project_id: projectId },
{ headers: { "Content-Type": "application/json" } },
).then(async (response: any) => {
const projectStates = response.data.project_states;
setProjectStates(projectStates);
if (projectStates.length > 0) {
setActiveProjectState(projectStates[projectStates.length - 1]);
}
});
};
const refreshRecommendations = (projectId: string | null) => {
BackendClient.get(
`recommendations?project_id=${projectId}`
).then((response) => {
setRecommendations(response.data.recommendations);
})
}
const onServerCode = () => {
setLoading(false);
refreshProjectStates(projectIdStorage);
setPrompt("");
};
const onServerRecommendation = () => {
refreshRecommendations(projectIdStorage);
};
}
我遇到的问题是,在createproject()的第一个网络请求和项目ID被设置之后--当在刷新项目状态/刷新建议中进一步访问时,项目ID总是空的.然而,它似乎只有在页面刷新后才能起作用.
在本例中,我使用的是Zustand,但它似乎也无法正常react useState().