react-router 未渲染的嵌套详细信息路由

Posted

技术标签:

【中文标题】react-router 未渲染的嵌套详细信息路由【英文标题】:Nested details route with react-router not rendering 【发布时间】:2014-12-15 23:09:15 【问题描述】:

我正在使用 react-router 插件来设置我的路由 我想提供两条路线list/list/:id(很常见) 我所拥有的和正在工作的是:

<Routes>
    <Route handler=App>
        <Route name="list"
            handler=ListComponent
            collection=new Collection()>
        </Route>
    </Route>
</Routes>

但我正在努力让我的“详细信息”路线发挥作用。我尝试的是:

<Routes>
    <Route handler=App>
        <Route name="list"
            handler=ListComponent
            collection=new Collection()>
            <Route name="list.details"
                path="list/:id"
                handler=DetailsComponent>
        </Route>
    </Route>
</Routes>

首先,这目前不起作用,我的DetailsComponent 在访问 list/123 时没有呈现(例如)

其次,即使这可行:我将如何管理将我收藏中的一个模型“向下”传递给DetailsComponent

【问题讨论】:

【参考方案1】:

要回答您的第一个问题,您的路由器代码有两个问题。巧合的是,正斜杠是这两个问题的答案:

    您需要关闭所有Route 组件。如果你自己写一个&lt;Route&gt;,你必须包括这样的结束标签:&lt;Route/&gt;

    您可能需要在列表路径的开头使用正斜杠。

所以你的代码应该是这样的:

<Routes>
    <Route handler=App>
        <Route name="list"
            handler=ListComponent
            collection=new Collection()>
            <Route name="listDetails"
                path="/list/:id"
                handler=DetailsComponent/>
        </Route>
    </Route>
</Routes>

另外,为了清楚起见,路由名称只是一个字符串标识符。我不确定你是否写了list.details 作为对象访问器来访问你的模型,但如果是这样,它不会像你想象的那样做。我将名称更改为 listDetails 以避免任何混淆,但 list.details 也是一个有效的字符串标识符,因此如果您愿意,请随时将其改回。

这解决了您在此处提供的块中的代码问题。在没有看到 DetailsComponent 组件和/或任何错误消息的情况下,我无法确定是否还有其他问题。

关于您的第二个查询,该解决方案相当简单(尽管react-router 没有您可能希望在这里的 Backbone 集成)。但是,根据 *** 规则,恐怕我一次只能回答一个问题。因此,如果您创建一个单独的问题,我很乐意提供答案。

【讨论】:

第一:永远不要在 *** 中编辑代码块,语法混乱不在我的原始代码中第二:它没有反斜杠第三:你是对的,每个问题一个问题:D 第四:“相当简单" 成功了,this.activeRouteHandler(props) 当然也可以嵌套使用 :) 第五:谢谢! 感谢您的 cmets!为了未来的读者,我想澄清一下,它可能是它没有工作的路径反斜杠,而不是子嵌套 &lt;Route/&gt; 末尾的那个,因为结束标记在 JSX 中是绝对必要的(并且任何其他 XML 方言)。是的,你用this.activeRouteHandler() 得到了它。我不确定你到底是怎么做的,但我的建议是将集合作为道具传递,然后使用 URL 中的 id 作为索引从集合中获取模型(this.props.collection.get(this.props.params.id) 应该可以,我认为)。 我认为您的意思只是“斜杠”或“正斜杠”。反斜杠是“\”,这不是你在说的。 谢谢@PaulFerrett,你是对的。想想我有多少次不耐烦地向非技术家庭成员和同事解释不同之处,我感到很尴尬,尽管多次重新阅读这个问题,我还是错过了这个错误。感谢您指出我的回答中的一个重大错误。

以上是关于react-router 未渲染的嵌套详细信息路由的主要内容,如果未能解决你的问题,请参考以下文章

在 react-router 中找不到嵌套路由的字体

使用 react-router 和 IndexRoute 嵌套路由(反应路由器布局)

React中的路由react-router

使用 react-router 和 webpack 开发服务器的嵌套 url 路由

在 react-router 中路由嵌套 url

React-Router 活动类不适用于嵌套路由