React Router中useLoaderData()是否会解析loader返回的Promise?
路由配置
<Route index element={<BlogPostsPage />} loader={blogPostLoader} />
BlogPostsPage 组件
function BlogPostsPage() { const posts = useLoaderData() return ( <> <h1>Our Blog Posts</h1> <Posts blogPosts={posts} /> </> ); } export function loader () { return getPosts() }
getPosts 函数
export async function getPosts() { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); if (!response.ok) { throw { message: 'Failed to fetch posts.', status: 500 }; } return response.json(); }
核心疑问
我的核心疑问是:由于loader函数返回的是一个Promise,而组件中并未使用await等待数据,useLoaderData()是否会为我们自动解析这个Promise?
解答
是的,useLoaderData() 会自动解析 loader 函数返回的 Promise。
React Router 的 loader 机制是在组件渲染之前就执行对应 loader 函数,它会自动等待这个 Promise 完成(resolve),再把解析后的数据传递给组件。当你在组件里调用 useLoaderData() 时,拿到的已经是 Promise resolve 后的最终数据(也就是例子里 getPosts() 异步请求回来的 posts 数组),所以完全不需要在组件里额外写 await。
简单来说,React Router 帮你处理了 Promise 的等待和解析过程,组件只需要直接取用数据即可。
内容的提问来源于stack exchange,提问作者kru
相关产品推荐
相关产品推荐

