【问题标题】:React router dom cant find rest-like urlReact路由器dom找不到类似rest的url
【发布时间】:2022-01-01 15:03:28
【问题描述】:

所以我的网站有文章,用户可以按位置研究文章。

我想在 url 上渲染找到的文章:/articles?location=:where,但我的路由器找不到路由,并将我重定向到not-found

这是我的浏览器路由器

<BrowserRouter>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/about" element={<AboutUs />} />
      <Route path="/contact" element={<Contact />} />
      <Route path="/publish-article" element={<WriteArticle />} />
      <Route path="/search-article" element={<Search />} />
      <Route path="/articles/:id" element={<RenderArticle />} />
      <Route path="/articles?location=:where" element={<ArticlesFound />} />
      <Route path="/quizz" element={<Quizz />} />
      <Route path="/login" element={<Login />} />
      <Route path="/register" element={<Register />} />
      <Route path="/users/:username" element={<UserProfile />} />
      <Route path="/user-settings" element={<ProfileSettings />} />
      <Route path="*" element={<NotFound />} />
    </Routes>
  </BrowserRouter>

有没有人知道我做错了什么?

【问题讨论】:

  • * 表示全部,所以它总是会重定向到 NotFound
  • 否,因为是最后一条路由,所以默认情况下。我所有的其他路线都有效。除了articles?location=:where

标签: reactjs react-router-dom


【解决方案1】:

您无需为 URL SearchParams 设置路由,只需将其提取到组件中即可

import { useSearchParams } from 'react-router-dom'
const [searchParams, setSearchParams] = useSearchParams();
searchParams.get("location");

至少在反应路由器 v6 中

【讨论】:

  • 如果我的路由器渲染了错误的组件,我如何提取 url 参数
  • 如果您想通过 SearchParams 呈现不同的组件,我认为您的 REST-Like API 是错误的。我只是将 if 语句添加到由“/articles”呈现的组件中。如果未设置 location-SearchParam,则全部渲染,等等。
  • 您的意思是添加以下路由:/articles*?然后解析参数?
  • 是的,我会将path="/articles?location=:where" 替换为path="/articles"
  • 您不是故意在路线末尾添加* 吗?因为我不知道路由器将如何找到包含查询字符串的路由。对我来说/articles 是渲染所有文章,/articles?location=paris 是在巴黎渲染文章
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2020-10-10
  • 2011-09-11
  • 2018-05-18
  • 1970-01-01
相关资源
最近更新 更多