【问题标题】:react-router: Should a nested route render a child component of the IndexRoute's component or should it render a smart parent (IndexRoute) component?react-router:嵌套路由应该渲染 IndexRoute 组件的子组件还是应该渲染智能父(IndexRoute)组件?
【发布时间】:2017-04-20 08:52:15
【问题描述】:

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

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

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

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

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

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

一)

<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 不是更好吗?

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

【问题讨论】:

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


    【解决方案1】:

    您应该废弃 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>
            )
        }
    }
    

    【讨论】:

    • 我对这个答案的一个问题是:如果 :photoIdentifier 是要展开的照片的 ID,我应该在父 Lookbook.js 组件中捕获并使用这个 ID,还是应该我在 PhotoDetailsModal 组件中捕获并使用它?此外,我应该在哪个组件中检查 ID 是否存在于数据库中并对应于数据库中的有效照片?我想尝试在 Lookbook.js 组件中保持数据获取,但是看起来对于这个答案 Lookbook.js 有点不知道 PhotoDetailsModal 应该如何呈现。
    • @connected_user 我不明白为什么需要在 Lookbook 中获取数据,除非您最初加载所有照片详细信息并希望将数据作为道具传递给基于模式的身份证上。在这种情况下,您可以检查子代是否存在,如果存在则将适当的数据和 ID 传递给模态组件。
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多