前端
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 提供支持
在本页

这有帮助吗?

  1. 钩子函数

useActionData

此钩子提供前一个导航操作结果的返回值,如果没有提交,则返回 undefined。

import { useActionData } from "react-router-dom";

function SomeComponent() {
  let actionData = useActionData();
  // ...
}

此挂钩最常见的用例是表单验证错误。如果表单不正确,您可以返回错误并让用户重试:

import {
  useActionData,
  Form,
  redirect,
} from "react-router-dom";

export default function SignUp() {
  const errors = useActionData();

  return (
    <Form method="post">
      <p>
        <input type="text" name="email" />
        {errors?.email && <span>{errors.email}</span>}
      </p>

      <p>
        <input type="text" name="password" />
        {errors?.password && <span>{errors.password}</span>}
      </p>

      <p>
        <button type="submit">Sign up</button>
      </p>
    </Form>
  );
}

export async function action({ request }) {
  const formData = await request.formData();
  const email = formData.get("email");
  const password = formData.get("password");
  const errors = {};

  // validate the fields
  if (typeof email !== "string" || !email.includes("@")) {
    errors.email =
      "That doesn't look like an email address";
  }

  if (typeof password !== "string" || password.length < 6) {
    errors.password = "Password must be > 6 characters";
  }

  // return data if we have errors
  if (Object.keys(errors).length) {
    return errors;
  }

  // otherwise create the user and redirect
  await createUser(email, password);
  return redirect("/dashboard");
}
上一页钩子函数下一页useAsyncError

最后更新于9个月前

这有帮助吗?