![](/img/trans.png)
[英]Attempted import error: 'Outlet' is not exported from 'react-router-dom'
[英]Attempted import error: 'useRouteMatch' is not exported from 'react-router-dom'
当我尝试从 react-router-dom 模块导入 useRouteMatch 时出现此错误,出现此错误:
尝试导入错误:“useRouteMatch”未从“react-router-dom”导出。
我有错误版本的 react-router-dom 模块吗?
import { BrowserRouter as Router, Switch, Route, Link, useRouteMatch, useParams } from "react-router-dom";
我查看了模块的导出,实际上它没有导出。 我有错误的版本吗?
import _BrowserRouter from "./BrowserRouter"; export { _BrowserRouter as BrowserRouter }; import _HashRouter from "./HashRouter"; export { _HashRouter as HashRouter }; import _Link from "./Link"; export { _Link as Link }; import _MemoryRouter from "./MemoryRouter"; export { _MemoryRouter as MemoryRouter }; import _NavLink from "./NavLink"; export { _NavLink as NavLink }; import _Prompt from "./Prompt"; export { _Prompt as Prompt }; import _Redirect from "./Redirect"; export { _Redirect as Redirect }; import _Route from "./Route"; export { _Route as Route }; import _Router from "./Router"; export { _Router as Router }; import _StaticRouter from "./StaticRouter"; export { _StaticRouter as StaticRouter }; import _Switch from "./Switch"; export { _Switch as Switch }; import _generatePath from "./generatePath"; export { _generatePath as generatePath }; import _matchPath from "./matchPath"; export { _matchPath as matchPath }; import _withRouter from "./withRouter"; export { _withRouter as withRouter };
请帮忙,我需要你的大脑:)
我有同样的问题,对我来说,我只需要更新我正在使用的 react-router 的版本。
useRouteMatch
添加了 react-router V5.1https://reacttraining.com/blog/react-router-v5-1/#useroutematch
将您的 package.json 更新为"react-router-dom": "^5.1.2",
删除节点模块并运行npm install
只需将您的react-router-dom
版本更新到最新版本。
npm i react-router-dom@latest
检查react-router-dom
版本应该兼容或大于“5.1”,因此您可以使用一些钩子,如useRouteMatch()
, useHistory()
..
我解决了将react-router-dom
更新到大于 5.1 的版本
npm install react-router-dom@5.1.2 --save
不要忘记使用npm start
再次启动应用程序以查看更改。
但是,我还有另一个问题可以提供帮助。 我有一个钩子错误。 这是我的代码,你有什么想法吗?
错误:无效的挂钩调用。 钩子只能在 function 组件的主体内部调用。
这是我的渲染 function
render() { let { path, url } = useRouteMatch(); const Products = this.displayProducts(); const Edition = this.displayEdition(); return ( <div className={this.state.editionProduct? 'catalog edit': 'catalog'}> <h1>Catalog</h1> <Switch> <Route exact path={`${path}/list`}> <ul className='catalog-list'> {Products} </ul> </Route> <Route path={`${path}/edit`}> <Edition saveProductHandler={this.saveProductHandler} closeEdition={this.closeEdition} product={this.state.editionProduct} /> </Route> </Switch> </div> ); }
如果从 v5 升级到 v6,请按照升级指南将useRouteMatch
替换为useMatch
...
https://reactrouter.com/docs/en/v6/upgrading/v5#replace-useroutematch-with-usematch
您不能在基于类的组件中调用钩子。
渲染(){让{路径,url}=useRouteMatch(); ... }
钩子不能在 class 组件内部使用。 您应该重构代码以使其正常工作。 使用 useState 和 useEffect 挂钩,您仍然可以利用组件级别 state 和组件生命周期。
如果没有该组件的完整代码,我将无法使用您的示例执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.