前端
PythonJava运维数据库
React-Router(v6)
React-Router(v6)
  • Routers
    • createBrowserRouter
    • createHashRouter
    • createMemoryRouter
    • createStaticHandler
    • createStaticRouter
    • RouterProvider
    • StaticRouterProvider
  • Router 组件
    • BrowserRouter
    • HashRouter
    • MemoryRouter
    • NativeRouter
    • Router
    • StaticRouter
  • Route
    • Route
    • action
    • errorElement
    • hydrateFallbackElement
    • lazy
    • loader
    • shouldRevalidate
  • 组件
    • Await
    • Form
    • Link
    • Link(RN)
    • NavLink
    • Navigate
    • Outlet
    • Route
    • Routes
    • ScrollRestoration
  • 钩子函数
    • useActionData
    • useAsyncError
    • useAsyncValue
    • useBeforeUnload
    • useBlocker
    • useFetcher
    • useFetchers
    • useFormAction
    • useHref
    • useinRouterContext
    • useLinkcLickHandler
    • useLinkPressHandler
    • useLoaderData
    • useLocation
    • useMatch
    • useMatches
    • useNavigate
    • useNavigation
    • useNavigationType
    • useOutlet
    • useOutletContext
    • useParams
    • unstable_usePrompt
    • useResolvedPath
    • useRevalidator
    • useRouteError
    • useRouteLoaderData
    • useRoutes
    • useSearchParams
    • useSearchParams (RN)
    • useSubmit
    • unstable_useViewTransitionState
  • Utilities
    • Fetch 工具类
      • json
      • redirect
      • redirectDocument
      • replace
    • 其他工具类
      • createRoutesFromChildren
      • createRoutesFromElements
      • createSearchParams
      • defer
      • generatePath
      • isRouteErrorResponse
      • Location
      • matchPath
      • matchRoutes
      • renderMatches
      • resolvePath
  • 🥇Routers
    • Router
    • Route 配置
      • lazy
      • action
      • shouldRevalidate
      • loader
由 GitBook 提供支持
在本页
  • errorElement
  • resolve

这有帮助吗?

  1. 组件

Await

用于呈现具有自动错误处理的延迟值。

import React from 'react';
import {Await, useLoaderData} from "react-router-dom";

export function Book() {
  const {book, reviews} = useLoaderData()
  return (
    <div>
      <h1>{book.title}</h1>
      <p>{book.description}</p>
      <React.Suspense fallback={<div>Loading reviews...</div>}>
        <Await resolve={reviews} errorElement="could not load reviews">
          {reviews => <Reviews item={reviews}/>}
        </Await>
      </React.Suspense>
    </div>
  );
}

注意:<Await/>期望再<React.Suspense>或<React.SuspenseList/>父级中呈现,以启用会退用户界面。

类型声明

declare function Await(
  props: AwaitProps
): React.ReactElement;

interface AwaitProps {
  children: React.ReactNode | AwaitResolveRenderFunction;
  errorElement?: React.ReactNode;
  resolve: TrackedPromise | any;
}

interface AwaitResolveRenderFunction {
  (data: Awaited<any>): React.ReactElement;
}

children

可以是React元素或函数,使用函数时,值作为唯一参数提供。使用React元素时,useAsyncValue将提供数据。

<Await resolve={reviewsPromise}>
  {(resolvedReviews) => <Reviews items={resolvedReviews} />}
</Await>
<Await resolve={reviewsPromise}>
  <Reviews />
</Await>;

function Reviews() {
  const resolvedReviews = useAsyncValue();
  return <div>{/* ... */}</div>;
}

errorElement

当Promise被拒绝时,错误元素将呈现。你可以使用useAsyncError访问错误。

如果Promise被拒绝,你可以通过useAsyncError钩子提供可选的errorElement来处理上下文UI中的错误。

<Await
  resolve={reviewsPromise}
  errorElement={<ReviewsError />}
>
  <Reviews />
</Await>;

function ReviewsError() {
  const error = useAsyncError();
  return <div>{error.message}</div>;
}

如果你不提供errorElement,被拒绝的值将会冒泡到最近的路由级别errorElement,并可通过useRouterRrror钩子访问。

resolve

接受从延迟加载器返回的promise,进行解析和渲染。

import {defer, Route, useLoaderData, Await,} from "react-router-dom";

<Route
  loader={async () => {
    let book = await getBook();
    let reviews = getReviews(); // not awaited
    return defer({
      book,
      reviews,
    });
  }}
  element={<Book/>}
/>;

function Book() {
  const {book, reviews,} = useLoaderData();
  return (
    <div>
      <h1>{book.title}</h1>
      <p>{book.description}</p>
      <React.Suspense fallback={<ReviewsSkeleton/>}>
        <Await
          // and is the promise we pass to Await
          resolve={reviews}
        >
          <Reviews/>
        </Await>
      </React.Suspense>
    </div>
  );
}
上一页组件下一页Form

最后更新于2年前

这有帮助吗?