导航离开然后返回页面时如何记住 React-Router URL 参数?

Posted

技术标签:

【中文标题】导航离开然后返回页面时如何记住 React-Router URL 参数?【英文标题】:How do I remember a React-Router URL parameter when navigating away and then back to a page? 【发布时间】:2018-10-07 17:48:49 【问题描述】:

问题:

我有一个使用 React-Router-DOM 进行哈希路由的 React 应用程序。该应用程序有一个带有HomeAbout 的主导航栏。 Home 内容有一个带有ABC 的子导航栏。

当导航到www.mysite.com/#/home/ 时,路由器默认(重定向)到www.mysite.com/#/home/A

当通过Home 导航链接从/#/about 导航到/#/home 时,我希望路由器记住上次使用的子路由。目前,使用Home nav 链接导航到首页,返回到#/home/A

示例:

    在浏览器中输入 URL www.mysite.com ==> 呈现/home/#/A 使用Home 下的子导航菜单选择B ===> 呈现/#/home/B 使用主导航菜单选择About ==> 呈现/#/about 使用主导航菜单选择Home ==> 呈现/#/home/B

结构

<App>
    <header>
        <NavLink to="/home">home</NavLink>
        <NavLink to="/contact">contact</NavLink>
    </header>

    <section>
        <Switch>
            <Redirect exact from="/" to="/home/A" />

            <Route path="/home">
                <div>
                    <sub-header>
                        <NavLink to="/home/A">A</NavLink>
                        <NavLink to="/home/B">B</NavLink>
                        <NavLink to="/home/C">C</NavLink>
                    </sub-header>

                    <div>
                        ... content for home
                        <Switch>
                            <Route path="/home/:id" component=ChildComponentThatUsesID>
                        </Switch>
                    </div>

                </div>
            </Route>

            <Route path="/about"> ... </Route>              

        </Switch>
    </section>
</App>

注意事项

我知道我需要更改重定向,这只是为了方便。我也知道我将不得不更改&lt;NavLink to="/home"&gt; 以某种方式合并使用子菜单链接之一时将设置的变量属性或状态,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

使用 react-router 的内部状态。

const location = 
  pathname: '/somewhere',
  state:  fromDashboard: true 


<Redirect to=location/>

您可以稍后通过this.props.location.state访问它。

【讨论】:

在离开 /home/xxx 时如何使用这种内部状态来保存位置?【参考方案2】:

我从未尝试过这种类型的事情,但 React Router 有历史“组件/道具”。请参阅此处的文档: https://github.com/ReactTraining/history#properties

【讨论】:

以上是关于导航离开然后返回页面时如何记住 React-Router URL 参数?的主要内容,如果未能解决你的问题,请参考以下文章

记住(持久化)jqGrid的过滤器、排序顺序和当前页面

返回时删除导航栏

使用 Ionic v2 离开页面(向后导航)之前发出警报

JQM Filterable Widget:如何在离开页面时清除?

导航到其他页面后,如何在 SwiftUI 中恢复已发布的计时器?

Flutter:如何在抽屉内推送/弹出导航器页面?