javascript - react-router:嵌套路由应该渲染 IndexRoute 组件的子组件还是应该渲染智能父(IndexRoute)组件?

标签 javascript reactjs navigation react-router single-page-application

我的问题很简单。然而,作为 React 新手,以及所有这些路由内容,我不确定如何正确使用嵌套路由。

如果我有一个“lookbook”页面存储在父 Lookbook.js 组件中,我知道我的 IndexRoute 将呈现 Lookbook.js。像这样的事情:

<Route path="lookbook">
  <IndexRoute component={Lookbook}/>
</Route>

假设 Lookbook 是一个照片源,单击其中一张照片将打开一个包含扩展照片和额外数据的模式。我们将这个扩展的照片模式组件称为 PhotoDetailsModal.js(它是 Lookbook.js 的子组件)。我想创建一条路线来加载 Lookbook 并自动打开特定照片,从而使我能够提供特定照片的可共享 URL。

使用嵌套路由完成上述任务的正确方法是什么?

我的第一个未知数与路线本身有关,它看起来像:

A)

<Route path="lookbook">
  <IndexRoute component={Lookbook}/>
  <Route path=":photoIdentifier" component={Lookbook}/>
</Route>

B)

<Route path="lookbook">
  <IndexRoute component={Lookbook}/>
  <Route path=":photoIdentifier" component={PhotoDetailsModal}/>
</Route>

基本上,对于我的任何动态嵌套路由,我是否应该渲染父组件 Lookbook.js 并且让它足够智能以注意到 URL 包含 photoID 或者我可以以某种方式渲染 PhotoDetailsModal明确地显示在 Lookbook 之上?

选项 B 似乎更接近最佳解决方案,但是如果我想在父 Lookbook.js 组件中收集所有数据,选项 A 不是更好吗?

寻找有关此类用例的最佳实践的任何见解。

最佳答案

您应该废弃 IndexRoute 并使用常规路由来嵌套模式。

// Routes
<Route path="/" component={Application}>
    <Route path="lookbook" component={Lookbook}>
        <Route path=":photoIdentifier" component={PhotoDetailsModal} />
    </Route>
</Route>



// Lookbook.jsx
class Lookbook extends Component {
    constructor() {
        this.state = {}
    }
    render() {
        return (
            <div>
                <h1>This is the look up page</h2>
                <h2>Renders a modal if children in props</h2>
                {this.props.children}
            </div>
        )
    }
}

关于javascript - react-router:嵌套路由应该渲染 IndexRoute 组件的子组件还是应该渲染智能父(IndexRoute)组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983123/

相关文章:

javascript - 除了附加之外,我如何使用新的 FormData 方法?

javascript - 如何动态过滤 jQuery Mobile 选择表单

javascript - Linux 上的 Node.js 依赖项不兼容

c# - 选择注销后导航回 LoginScreen

javascript - 如何在 riot-lol-api npm 包中使用缓存?

javascript - setTimeout 如何查看模块内的私有(private)函数?

javascript - Next.js:文件上传时出现错误 413 请求实体太大

javascript - 类型错误 : Cannot read property 'book' of undefined at BookDetails. 渲染

jquery - 幻灯片导航菜单

Emacs 在同名文件之间导航