NextJS 如果 router.back() 没有要路由到的历史记录,则路由到主目录

NextJS if router.back() has no history to route to, route to home

提问人:ascentryan 提问时间:8/19/2023 最后编辑:greybeardascentryan 更新时间:11/13/2023 访问量:1090

问:

我正在使用 NextJS (v.13.4.15) 应用程序目录

我正在使用 react-native webview 在移动应用程序中显示网站,因此后退按钮对于导航至关重要(我无法访问浏览器的后退按钮)

我想要类似的东西

客户端组件的“use client”:

    <button
      onClick={() => window.history.state && window.history.state.idx > 0 ? router.back() : router.push('/')}
    >

但是我无法让它工作,NextJS 似乎在访问 window.history 时有问题(或者它可能不是 NextJS,它只是一个隐私问题)

即使我可以访问窗口,window 对象也包含令人困惑且不一致的子属性和值,如下所示:

{
    "__NA": true,
    "tree": [
        "",
        {
            "children": [
                "courses",
                {
                    "children": [
                        [
                            "slug",
                            "hacking-success",
                            "c"
                        ],
                        {
                            "children": [
                                "__PAGE__",
                                {}
                            ]
                        }
                    ]
                }
            ]
        },
        null,
        null,
        true
    ]
}

必须有一种方法来检查 (router.back()) 是否为 null 或无法返回,然后 router.push('/) 对吗?

理想:

router.back() ?? router.push('/')

或者有人可以帮忙解释这个history.state.idx.tree吗?长度似乎与导航中的历史记录项数不匹配,而是与 URL 的父级/层次结构匹配

我希望NextJS在路由器上有一个方法可以返回历史记录,或者如果历史记录为空,则提供null / false值

但是,我已经阅读了useRouter()文档,似乎不存在任何方法

我尝试访问该对象,但无法编写代码来检查历史记录是否不包含要导航回的路径window.history

我唯一的另一个想法是在链接到可以检查的“非主页”时传递一个参数,然后根据参数有条件地更改后退按钮逻辑,但这似乎效率低下

这个答案很接近,但似乎效率低下

reactjs .js 浏览器历史 下一个路由器

评论


答: 暂无答案