历史记录向后无法正常使用react路由器和服务器端页面

im9ewurl  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(195)

我正在将一个经典应用程序(仅服务器端页面呈现)转换为客户端应用程序(typescript+JSONAPI服务器中的前端应用程序)。该应用程序是相当后续,我正在转换它每页。新客户端应用程序正在使用react&react路由器。
我目前的状态是,一些页面在客户端处理,而其他页面仍在服务器端处理。在客户端和服务器端处理的页面之间,我遇到了历史导航的问题。
我知道最好的办法是使用 Link 以客户端页面和 a 以服务器页面为目标。不幸的是,有些链接被呈现为通用组件(例如列表),除非我在呈现链接之前检查每个url,看看路由是在客户端还是服务器端处理的,否则我无法知道是哪个组件( Linka )使用。
因此,我选择了以下路由器:

<Switch>
        <Route path="/route/handled/by/client">
            <MyPageComponent />
        </Route>
        <Route path="/other/route/handled/by/client">
            <MyOtherPageComponent />
        </Route>
        <Route path="/route/handled/by/server">
            <ExternalPage />
        </Route>
        <Route>
            <NotFoundPage />
        </Route>
    </Switch>

以及以下 ExternalPage 组成部分:

import { useEffect } from "react"

import Loader from "./Loader"
import Page from "./Page"

export default function ExternalPage() {
    useEffect(() => {
        window.location.reload()
    })

    return (
        <Page title="Loading...">
            <section>
                <Loader />
            </section>
        </Page>
    )
}

这样,我只能使用 Link 代码中的组件并避免 a 尽可能多。所以当我导航到 /route/handled/by/server ,由于 ExternalPage 组成部分。但是,向后的历史记录无法正常工作:当我单击浏览器的“后退”按钮时,url会变回客户端页面url,但页面不会刷新(它会保留服务器页面内容)。
那么,有人知道如何让这段历史完美运作吗?有没有办法让浏览器明白,当从服务器页面返回到客户端页面时,它必须刷新页面?
提前感谢您的回答。
这是一份重新回购协议:https://github.com/vinorcola/test-client-server-router
导航到 http://localhost:3000/page-c ,然后单击 Page A (Server) ,然后从浏览器中单击“上一步”按钮。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题