Reactjs 反应-页面不';使用“浏览器后退”按钮时不显示

Reactjs 反应-页面不';使用“浏览器后退”按钮时不显示,reactjs,back,mern,Reactjs,Back,Mern,我已经浏览了很多相关主题,到目前为止,我无法解决我的MERN应用程序的问题 当我尝试转到另一个网站并使用浏览器后退按钮时,某些页面无法显示。 相反,我只能看到我的json文件/API响应… 我需要刷新页面才能正确显示。 例如,如果您要转到:,尝试转到其他网站并单击浏览器中的“返回”按钮,则该页面不会显示 只有当你退出网站,转到另一个网站,然后按“返回”按钮返回时,才会发生这种情况。。。。当你停留在网站上时,它不会发生。 页面没有问题: 或 只有这样的页面才会出现: https://webs

我已经浏览了很多相关主题,到目前为止,我无法解决我的MERN应用程序的问题

当我尝试转到另一个网站并使用浏览器后退按钮时,某些页面无法显示。

相反,我只能看到我的json文件/API响应… 我需要刷新页面才能正确显示。

例如,如果您要转到:,尝试转到其他网站并单击浏览器中的“返回”按钮,则该页面不会显示

只有当你退出网站,转到另一个网站,然后按“返回”按钮返回时,才会发生这种情况。。。。当你停留在网站上时,它不会发生。
页面没有问题:

只有这样的页面才会出现:

https://website.com/royalty-free-music/:category/page-:第页

例如:


我认为它可能与
client/src/components/tracks/tracks.js中的状态相关,但我不知道该修复什么



提前感谢您的帮助(:

这可能是由于浏览器缓存问题。这是一个使用React的单页应用程序,因此您需要始终浏览前面的应用程序
index.html
。为此,您可以在其他路由后声明的
/*
上正确地提供
index.html
,并且还使用一些中间件(历史回退)。 但是,当您在客户端和服务器上声明相同的路由时:
/royalty free music/all/page-1
浏览器可能会在缓存中查找响应,并使用服务器提供的响应(JSON数据),而不是前端应用程序对应的响应

您可以通过两种方式解决此问题:

  • 显然,更改服务器URL,或者在其前面加上
    api
    。这在语义上更为正确(IMO),因为服务器和前端路由的用途不同(此处不涉及服务器端渲染)
  • 通过在路由中使用
    res.set('cache-Control','no store,no cache,must revalidate,private')
    禁用服务器路由上的缓存

有趣的事实是,在“网络”中选中“禁用缓存”打开开发工具时,Chrome没有问题tab非常感谢!它可以工作!首先,当我用
api
作为路由前缀时,路由不再工作,我必须删除历史回退中间件才能正常工作。之后不需要禁用缓存。