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

升级React Router至7.3.0后TypeScript组件useNavigate报错求助

React Router 升级到7.3.0后出现useNavigate上下文错误

将React Router从6.29.0版本升级到7.3.0后,触发如下错误:

Error: useNavigate() may be used only in the context of a component.

该错误仅在JavaScript组件调用TypeScript组件时出现。降级回6.29.0版本,或把调用useNavigate的子组件改为JavaScript组件,问题都能解决,但修改组件类型会引发其他问题。

简化代码示例

Routes 组件(JSX)

const Routes = () => {
  return (
    <BrowserRouter>
      <TestComponent />
    </BrowserRouter>
  )
}

TestComponent 组件(TSX)

const TestComponent: FunctionComponent<void> = () => {
  const navigate = useNavigate()
  return <></>
}

export default TestComponent

完整项目代码

index.jsx

import React from 'react'

import { createRoot } from 'react-dom/client'

import App from './components/App'

const grootDiv = document.createElement('div')
grootDiv.id = 'groot'
document.body.appendChild(grootDiv)
const root = createRoot(grootDiv)

// eslint-disable-next-line react/no-deprecated
root.render(<App />)

App.jsx

import React from 'react'

import Routes from './Navigation/Routes'

const App = () => {
  return <Routes />
}

App.displayName = 'App'

export default App

Routes.jsx

import * as React from 'react'

import { BrowserRouter, Route, Routes as ReactRoutes } from 'react-router-dom'

import TestComponent from './TestComponent'

const Test = () => {
  return <div>Test</div>
}
const Routes = () => {
  return (
    <BrowserRouter>
      <TestComponent />
      <ReactRoutes>
        <Route element={<Test />} path="/" />
      </ReactRoutes>
    </BrowserRouter>
  )
}

export default Routes

TestComponent.tsx(重命名为.jsx可正常运行)

import * as React from 'react'

import { useNavigate } from 'react-router-dom'

const TestComponent = () => {
  const navigate = useNavigate()
  return <></>
}

export default TestComponent

package.json

{
  "name": "react-dom-example",
  "description": "react-dom-example",
  "files": [
    "dist/*"
  ],
  "scripts": {
    "dev": "NODE_OPTIONS=\"--max-old-space-size=4096\" webpack-dev-server --open --config webpack.local.js"
  },
  "engines": {
    "npm": ">=8",
    "node": ">=20.0"
  },
  "dependencies": {
    "prop-types": "^15.8.1",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-router-dom": "^7.3.0",
    "typescript": "^5.8.2",
    "util": "^0.12.5"
  },
  "devDependencies": {
    "@babel/preset-env": "*",
    "@babel/preset-react": "*",
    "@types/node": "^22.10.2",
    "@types/react": "^18.3.11",
    "@types/react-big-calendar": "^1.16.0",
    "@types/react-dom": "^18.3.5",
    "@types/react-router-dom": "^5.3.3",
    "babel-loader": "*",
    "css-loader": "*",
    "html-webpack-plugin": "*",
    "mini-css-extract-plugin": "*",
    "prettier": "*",
    "ts-loader": "*",
    "ts-node": "*",
    "url-loader": "*",
    "webpack": "*",
    "webpack-cli": "*",
    "webpack-dev-server": "*",
    "webpack-merge": "*"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "outDir": "dist",
    "sourceMap": true,
    "noImplicitAny": true,
    "allowSyntheticDefaultImports": true,
    "allowJs": true,
    "moduleResolution": "node",
    "module": "commonJS",
    "lib": ["es6", "dom"],
    "target": "ES6",
    "jsx": "react",
    "typeRoots": ["node_modules/@types", "node_modules/@testing-library"]
  },
  "exclude": [
    "node_modules",
    "dist",
    "playwright" // playwright compiles under it's own rules.  No need to include it here.
  ]
}

当前使用环境:TypeScript 5.8.2、Webpack 5.98.0,希望通过调整TypeScript配置解决该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:35:54