出现错误: Guard(...): 从渲染中没有返回任何内容。这通常意味着缺少一个返回语句。
我希望在将元素返回给路由元素之前,在我的守卫组件中调用API以检查已登录用户是否具有访问特定路由的权限。
为此,我实现了一个守卫。以下是路由文件代码。
export default function Router() {
return (
<Routes>
<Route path="organizations">
<Route path="list" element={<Guard><ListOrganization /></Guard>} />
</Routes >
);
}
守卫组件代码
const Guard = (props) => {
fetch('https://apiToCheckPermission.com')
.then(response => {
if (response.isPermission) {
return props.children;
}
})
};
export default Guard;
我想实现异步路由元素,但如果我不立即从守卫(Guard)返回元素,React就会报错。
请问有谁可以告诉我如何解决这个错误?
useState
和useEffect
? - lpizzinidevsetHasPermission(response.isPermission);
。 - lpizzinidevuseEffect
钩子的回调函数绝对不能是一个async
函数。这将隐式返回一个 Promise 对象,React 将尝试将其用作useEffect
钩子的清理函数。只需将异步回调抽象成在回调中调用的内部函数,或在useEffect
钩子外部声明并在回调中调用即可。 - Drew Reese