react-router-dom 6.4版本useNavigate()报错:需在<Router>上下文使用
检查依赖版本一致性
确认react-router和react-router-dom的版本完全匹配,6.4+版本对这两个包的版本同步要求严格。运行npm ls react-router react-router-dom查看是否存在版本差异,若有则统一升级到相同的6.4+版本。同时检查是否存在重复安装的情况(比如项目根目录和子包的node_modules里都有该依赖),需清理多余安装。排查StrictMode的双重渲染影响
React 18的<StrictMode>在开发环境会触发组件两次渲染,可能导致useNavigate在Router上下文未完全初始化时被调用。可以临时移除<StrictMode>测试,如果错误消失,说明是该问题导致。此时可以调整Orders组件内的逻辑:将useNavigate的调用放在useEffect钩子中,确保在组件挂载后再执行跳转操作,示例:import { useNavigate, useEffect } from 'react-router-dom'; function Orders() { const navigate = useNavigate(); useEffect(() => { // 这里放需要调用navigate的逻辑 // 比如 navigate('/detail'); }, [navigate]); // ...其他组件代码 }检查组件内
useNavigate的调用时机
确保Orders组件中没有在顶层直接执行navigate的逻辑(比如组件渲染时立即调用navigate('/xxx')),这种同步执行的代码可能在Router上下文未就绪时触发错误。所有涉及navigate的操作都应放在副作用钩子(如useEffect)或事件回调(如按钮点击事件)中。再次确认导入正确性
核实Orders组件中useNavigate的导入语句为import { useNavigate } from 'react-router-dom',排除从其他库或错误路径导入的情况。
内容的提问来源于stack exchange,提问作者paradox37

