升级到 React Router v6 后,我的应用程序停止工作,并且我未能找到在版本 6 中实现相同行为的方法。
这是我升级到的版本:react-router-dom 6.2.1。
这是与先前版本一起使用的代码5.2.0:
<Router basename="/#">
<Route path="/login">
<Login />
</Route>
<Route path="/">
<Home />
</Route>
</Router>
<Link to="/login">Login</Link>
Run Code Online (Sandbox Code Playgroud)
我导航到http://localhost:3000/#/login. 现在连也http://localhost:3000行不通了。
这是我在浏览器控制台中收到的完整错误:
<Router basename="/#"> 无法匹配 URL“/”,因为它不是以基本名称开头,因此 <Router> 不会呈现任何内容。
我已经阅读了 StackOverflow、Github 问题、迁移指南中能找到的所有内容,尝试了许多解决方法,但似乎没有任何方法可以实现旧的行为。就像 v6 根本不尊重 URL 片段一样。
我需要 URL 片段,以便当用户刷新页面或为 URL 添加书签时,它实际上可以工作。
如何使其与 React Router v6 一起工作?
首先,我已经阅读了 Next.js 文档,通过了教程,查看了许多示例,但最终,我仍然无法使用 Next.js 实现一个非常简单的事情。
我有一个具有以下区域设置的应用程序:en和de。
路线如下:
/en/things/[id]
/de/things/[id]
Run Code Online (Sandbox Code Playgroud)
所以基本上,我需要用两种语言显示一些与事物 ID 无关的静态文本。这些只是所有 ID 都相同的纯文本。然后我有一些实际上需要路径中的 ID 的 AJAX。
现在麻烦开始了:
getStaticProps,things/[id].js我会收到此错误:Error: MISSING_MESSAGE: No messages were configured on the provider.
Run Code Online (Sandbox Code Playgroud)
getStaticProps这样的内容:export async function getStaticProps({locale}) {
return {
props: {
messages: await import(`../messages/${locale}.json`)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
Error: getStaticPaths is required for dynamic SSG pages and is missing for '/things/[id]'.
Run Code Online (Sandbox Code Playgroud)
getStaticPaths这样添加:export const getStaticPaths = () => ({
paths: [], …Run Code Online (Sandbox Code Playgroud)