我正在使用带有Asp.Net Core + Typescript后端的React Web应用程序。路由位于前端,由React-Router v4管理。到目前为止一切正常。
顺便说一句,在某些情况下,我需要(我想要)由服务器重定向路由,而不是让它传递到浏览器逻辑。例如,当Cookie不存在或过期时,我想强制重定向到特定页面。
例如,如果我使用类似<Redirect to="/reserved" />
的东西,React.Router会尽力:路由到“保留”页面,但这不是我想要的。我需要将此路径提供给服务器,即绕过前端路由。
在这种情况下,我找到的解决方案是按以下方式设置所需的路径:
window.location.href = '/reserved';
这似乎将新的路径请求直接发送到服务器,而没有(明显)参与React.Router。显然,一切正常,正如我所期望的。
问题是:这是实现所需行为的可靠方法,还是看起来很容易被黑客入侵(我应该避免)?
答案 0 :(得分:1)
在单页应用程序(SPA)的上下文中,无论使用何种框架或技术,显式设置setTimeout
都是离开SPA的路由控制并强制浏览器的一种很好的方法。为该新路由发出实际的HTTP请求。
这样做当然意味着将卸载整个页面,所以这样做时,您将离开SPA。如果该目标URL然后再次加载相同的SPA,则通常会分散用户的注意力。这就是为什么常见的SPA路由器实现会拦截路由更改并通过自己的路由进行处理,而不是让浏览器发出实际请求的原因。
您应该查看路由器的文档,以查看是否可以添加一些路由器防护以使您可以验证负载或路线更改时的情况,以便可以将用户导航到某个强制位置。
如果该目标URL不属于SPA,则当然可以设置ChangeDetectorRef
。当然,这不是黑客,而是在不通过SPA路由器的情况下更改位置的正确方法。