我有一个组件,我希望在除根路径之外的所有路径上显示。因此,我没有提供Route
组件的所有路径,而是写了这样的:
<Route exact path={/^\/.+$/} component={() =>
<div><img src="../../../assets/AndreyBogdanov2.jpg" className="me" /></div>
} />
该正则表达式匹配在开头的斜杠之后具有任何字符的所有字符串。并且它按预期工作,但是,在控制台中我看到一个错误:
Warning: Failed prop type: Invalid prop `path` of type `regexp` supplied to `Route`, expected `string`.
in Route (created by App)
in App
in Router (created by BrowserRouter)
in BrowserRouter
不是我在抱怨,但我想知道,它是怎么回事?
在path
道具的文档中,它说它需要是path-to-regexp
理解的任何URL,并且在path-to-regexp
的文档中,它表示正则表达式是一个有效的参数。所以基本上,它是组件的PropTypes
在遇到字符串以外的东西时抛出错误。
它的工作原理是因为Route
唯一能做的就是将对象传递给path-to-regexp
,后者支持RegExp
实例。
基于PropTypes
的验证会抛出警告,但不会阻止属性实际处理。
在这种情况下,这可能是一个错误。 PropType
的path
编写不正确以匹配文档。
这是因为它只能接受一个字符串值。您还需要插入path-to-regexp
可以读取的内容,如React Router Training中所述。您可以查看如何在其存储库here中编写有效的正则表达式。