React Router v4:参数与 404 冲突

React Router v4 :param conflicting with 404

我目前正在努力研究 React 路由器。目前我正在尝试完成一个看起来像这样的路由器:

<BrowserRouter>
    <div>
        <Switch>
            <Route exact path="/" component={App} />
            <Route exact path="/:pageName" component={Page} />
            <Route component={NotFound}/>
        </Switch>
    </div>
</BrowserRouter>

想法是页面组件将使用 :pageName 呈现正确的标题和内容。但是,如果 pageName 不存在,它应该呈现 notFound (404) 页面。

目前 404 页面永远不会呈现,因为所有 url 都与页面路由相匹配。

检查 pageName 是否存在并且仅在存在的情况下匹配 Page 组件的常规方法是什么?我应该动态设置 ,还是页面组件应该检查​​和重定向?我该如何考虑?

如果您希望参数 pageName 位于特定的一组预定义值内,我会将这些值中的每一个都列为单独的路由:

<BrowserRouter>
    <div>
        <Switch>
            <Route exact path="/" component={App} />
            <Route exact path="/page1" component={Page} />
            <Route exact path="/page2" component={Page} />
            <Route exact path="/pagexyz" component={Page} />
            <Route path="*" component={NotFound}/>
        </Switch>
    </div>
</BrowserRouter>

如果您坚持所有页面只有一个路由,根据这篇文章you can use regexp to specify path,您可以编写正则表达式,它只接受您将拥有的页面名称并拒绝其他页面名称。

如果现有页面集未预定义但包含在数组中,我将使用地图生成如下路线:

pageNames.map((name) => (<Route exact path={'/'+name} component={Page} />