You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Remix中'useActionData must be used within a data router'错误

问题:useActionData必须在数据路由中使用的错误

我的login.tsx代码如下:

export default function Login() {
  const isSubmitting = useIsSubmitting("loginForm");
  const response: any = useActionData();

  if (response && response.status != 200) {
    toast.error(response.error, {
      id: response.error,
    });
  }

  return (
    <div
      style={{
        height: "100vh",
        display: "flex",
        alignItems: "center",
        justifyContent: "center",
      }}
    >
      <Card variant="outlined" sx={{ width: "100%", maxWidth: 300, p: 2 }}>
        <ValidatedForm validator={loginValidator} method="post" id="loginForm">
          <Typography
            variant="h5"
            style={{ textAlign: "center", fontWeight: "bold" }}
          >
            LOGIN
          </Typography>
          <CustomTextField name="username" label="Username" />
          <CustomPasswordField name="password" label="Password" />
          <Button
            disabled={isSubmitting}
            style={{ margin: "10px 0" }}
            fullWidth
            variant="contained"
            type="submit"
          >
            {!isSubmitting ? "Login" : <CircularProgress />}
          </Button>
        </ValidatedForm>
      </Card>
    </div>
  );
}

访问localhost:3000/auth/login时触发以下错误:

Error: useActionData must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.
    at Object.invariant [as UNSAFE_invariant] (/home/dulanja/Adavii/11StreetSite/node_modules/@remix-run/router/history.ts:494:11)
    at useDataRouterState (/home/dulanja/Adavii/11StreetSite/node_modules/remix-validated-form/node_modules/@remix-run/react/node_modules/react-router/lib/hooks.tsx:838:3)
    at Object.useActionData (/home/dulanja/Adavii/11StreetSite/node_modules/remix-validated-form/node_modules/@remix-run/react/node_modules/react-router/lib/hooks.tsx:933:15)
    at useActionData (/home/dulanja/Adavii/11StreetSite/node_modules/remix-validated-form/node_modules/@remix-run/react/dist/components.js:702:25)
    at useErrorResponseForForm (/home/dulanja/Adavii/11StreetSite/node_modules/remix-validated-form/src/internal/hooks.ts:31:22)
    at ValidatedForm (/home/dulanja/Adavii/11StreetSite/node_modules/remix-validated-form/src/ValidatedForm.tsx:265:24)
    at renderWithHooks (/home/dulanja/Adavii/11StreetSite/node_modules/react-dom/cjs/react-dom-server.node.development.js:5724:16)
    at renderIndeterminateComponent (/home/dulanja/Adavii/11StreetSite/node_modules/react-dom/cjs/react-dom-server.node.development.js:5797:15)
    at renderElement (/home/dulanja/Adavii/11StreetSite/node_modules/react-dom/cjs/react-dom-server.node.development.js:6012:7)
    at renderNodeDestructiveImpl (/home/dulanja/Adavii/11StreetSite/node_modules/react-dom/cjs/react-dom-server.node.development.js:6170:11)

我之前在其他分支执行npm install react-router-dom@latest @types/react-router-dom@latest能解决问题,但合并到主分支后再执行同样的命令,错误还是存在。


解决方法

1. 确认使用数据路由配置

useActionData是React Router v6.4+数据路由专属的钩子,必须确保你的应用根路由用createBrowserRouter创建,而不是旧版的BrowserRouter。去根路由配置文件里检查路由定义方式。

2. 清理依赖缓存重新安装

主分支可能存在依赖冲突或缓存残留,按以下步骤操作:

rm -rf node_modules
rm package-lock.json
npm install
npm install react-router-dom@latest @types/react-router-dom@latest

3. 更新remix-validated-form版本

错误栈显示remix-validated-form内部调用了useActionData,如果它的版本和当前react-router-dom不兼容也会触发错误,更新到最新版试试:

npm install remix-validated-form@latest

4. 检查组件路由上下文

确保Login组件是在数据路由的路由树范围内渲染的,不能在路由上下文之外直接渲染。比如确认/auth/login这条路由已经正确注册到数据路由中。

内容的提问来源于stack exchange,提问作者Dulanja Dilshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:20:19