Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当没有匹配项时从路由器中断_Javascript_Reactjs_React Router - Fatal编程技术网

Javascript 当没有匹配项时从路由器中断

Javascript 当没有匹配项时从路由器中断,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我们在现有的多页应用程序上添加了一些react路由器,打算慢慢过渡到SPA设置。使用链接链接到路由器尚未处理的页面时出现问题 在我的主开关内,我有一个故障路径Route,它呈现一个加载微调器,应该负责重定向、重新加载或触发浏览器的完整页面重新加载并显示旧服务器呈现的页面所需的任何操作。这很有效 。。。直到我们按下后退按钮 无论我使用的是窗口.open,窗口.location.assign,还是窗口.location.replace,当我点击后退按钮onpopstate时,地址栏中的URL会发生变

我们在现有的多页应用程序上添加了一些
react路由器
,打算慢慢过渡到SPA设置。使用
链接
链接到
路由器
尚未处理的页面时出现问题

在我的主开关内,我有一个故障路径
Route
,它呈现一个加载微调器,应该负责重定向、重新加载或触发浏览器的完整页面重新加载并显示旧服务器呈现的页面所需的任何操作。这很有效

。。。直到我们按下后退按钮

无论我使用的是
窗口.open
窗口.location.assign
,还是
窗口.location.replace
,当我点击后退按钮
onpopstate
时,地址栏中的URL会发生变化,但当
react router
在旧页面上不活动时,内容不会发生变化

唯一有效但肮脏的解决方法是稍微更改URL(fx添加?或(&R)并使用
window.location.replace
使浏览器进行刷新。但这感觉不对


非常感谢您的帮助。

找到了有效的解决方案

const initialPage = document.location.href.replace(/#.*/, '');
window.addEventListener('popstate', () => {
    if (!isAppPage()) {
        const newPage = document.location.href.replace(/#.*/, '');
        if (newPage !== initialPage) {
            window.location.reload();
        }
    }
});
其中,
isAppPage
是一个可以判断我们是否处于SPA模式的函数


我正在录制初始页面并将其与新页面进行比较,以便在不触发重新加载的情况下通过#散列进行导航

哦,孩子。我感觉到你的痛苦。这不是一个解决迁移问题的选项,而只是在迁移完成后将其推到生产环境中?也许使用HashRouter而不是Router会对您有所帮助,因为当您点击后退按钮时,react Router会触发更改,这只是一个LeadThank,@Thole 3>但对于我们拥有的许多页面来说,这不是一个选项。我考虑过HashRouter,但目标是用SPA lovin替换现有页面,HashRouter不会这么做。