react-router 相关问题

React Router - 一个完整的React路由库,灵感来自Ember的路由系统

两个 React 路由的行为不同。有人可以解释一下吗,我这几天一直在寻找答案

我的应用程序组件中有这两条路由: :} /> 我的 App 组件中有这两条路线: <Route path="create" element={user ? <Create /> : <Navigate to="/login" />} /> <Route path="dashboard" element={user ? <Dashboard /> : <Navigate to="/login" />} /> 如果用户未登录,他们将无法访问这两条路线,应该被定向到 login 页面,这样就可以了。然而,当用户登录时,我可以转到/dashboard,这很好,但是如果我转到/create,React会重定向到/dashboard。这让我很头疼,为什么呢?我缺少什么?谢谢大家 当我在地址栏中手动输入网址或刷新 /create 页面时,会发生这种情况。即使我已登录,我也会被重定向到/dashboard。谢谢 您可能在路由配置中使用相对路径,这在直接导航到 URL 时可能会导致问题。相反,请使用以正斜杠 / 开头的绝对路径。 <Route path="/create" element={user ? <Create /> : <Navigate to="/login" />} /> <Route path="/dashboard" element={user ? <Dashboard /> : <Navigate to="/login" />} />

回答 1 投票 0

如何在 React Router DOM v6 上使用 ScrollRestoration

我已经创建了我的路由器,如 RRDv6 文档中推荐的那样: 导出常量路由器 = createBrowserRouter([ { 小路: '/', 元素: , 孩子们: [ ...

回答 1 投票 0

如何正确编写navlink?

导航链接在浏览器中不起作用,它显示:未捕获类型错误:无法解构“React.useContext(...)”的属性“未来”,因为它为空。我在其他项目中使用过 NavLink,但它也不起作用...

回答 2 投票 0

受保护的路由在 API 响应到达之前重定向

如果订阅结束,我正在使用受保护的路由将用户重定向到订阅页面。但 Route 并不等待 api 响应到达。 const ProtectedRoute = ({ 组件: Comp...

回答 1 投票 0

如何在页面重新加载时清除react-router中的location.state?

我目前正在通过路线更改的状态,如下所示: 我目前正在通过路线更改来传递我的状态,如下所示: <Link to={{ pathname:`/transactions/${props.transaction.id}`, state: {transaction: props.transaction} }}> View Details </Link> 我的逻辑是,如果“location.state.transaction”存在,则不获取新数据,否则获取数据。 现在的缺陷是页面重新加载时。如果用户重新加载页面,应用程序需要获取新数据。我认为如果重新加载,“location.state”会被清除,但显然状态保存在 sessionStorage 中。 我该如何解决这个问题? 我可以每次都获取新数据,但单击“查看详细信息”链接时不应获取数据。 如果您使用的是 React hooks,则可以直接使用 window.history 来清除状态而不触发重新渲染。这比使用 useHistory 钩子的 replace 方法要好,后者会导致组件重新渲染。 window.history.replaceState({}, '') 我也遇到了这个问题,我最终所做的是从 React Router 检索浏览器历史记录并清除特定的 location.state 属性。所以在你的情况下,它会是transaction。我在 componentDidMount 中执行了此操作,以便在您第一次访问该页面后,该属性不应再存在, import createHistory from 'history/createBrowserHistory' ... componentDidMount(){ const history = createHistory(); if (history.location.state && history.location.state.transaction) { let state = { ...history.location.state }; delete state.transaction; history.replace({ ...history.location, state }); } } 有更好的方法,无需使用 3 方库。 我们可以使用history.replace() https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md componentDidMount(){ const {location,history} = this.props; //use the state via location.state //and replace the state via history.replace() } 在 React Router V6 中,您可以使用 useNavigate() 清除当前路径的状态: import React, { useEffect } from "react"; import { useLocation, useNavigate } from "react-router-dom"; useEffect(() => { const location = useLocation(); const navigate = useNavigate(); navigate(location.pathname, {}); // reload and pass empty object to clear state // we can also use replace option: ..., {replace: true} }, []); 使用状态后,再次调度一个空状态的操作来清理状态。 this.props.dispatch(replace({ ...this.props.location, state: undefined }); history.replace({ state: {} })。 如果您还想将用户重定向到某个地方,请使用 history.replace({ pathname: '/profile/me', state: {} }) 在 React Router v6 中,您可以执行以下操作: const location = useLocation(); const navigate = useNavigate(); const state = location.state; // Do some stuff with the state // ... // Clear the state after navigate(location.pathname, { replace: true }); 导航到当前页面除了清除状态(修改历史记录)之外不会产生任何可见效果。 这可能有效。 const history = useHistory(); // consume the history.location.state and reset the state useEffect(() => { history.replace(`/transactions/${history.location.state.transaction.id}`, {}); }, []); 我建议不要在这里使用 location 属性,而是创建一个带有路径 /transactions/:transactionId 的路线(无论你在哪里定义它们),并在目标内部的 transactionId 属性中捕获 props.match.params.transactionId成分。然后在 componentDidMount 中,您可以调度 API 请求操作以获取交易。不要忘记从链接的 props 中删除 state 参数。 这些都不会使用 useNavigate 重置我的状态。我要做的就是在导航上设置 useEffect。 ... const navigate = useNavigate() ... useEffect(() => { // set state here .... },[navigate]

回答 10 投票 0

反应导出服务中 useNavigate 上的无效挂钩调用

我将以下代码导出为 CommonService.tsx 并调用为 COMMON.redirect('/'); 从“react-router-dom”导入{useNavigate}; 导出函数重定向(路由:字符串){ c...

回答 1 投票 0

useNavigate 不会替换我的动态参数

在我们的项目中,我们使用的是react-router版本4,我们已经迁移到版本6。 然而,自从 useLocation API 更改为

回答 2 投票 0

React 中的路由,在页面之间导航

我是 React 新手,我不明白如何在页面之间导航/路由。 我开发了一个电子商务网站,在第一页我有图像,我想为每个图像单击打开一个新的不同页面...

回答 1 投票 0

结合使用react useState和useLoaderData会抛出无限循环错误

初始情况: 我有一个元素“root”,它在每次调用时检查用户是否经过身份验证。我目前正在尝试新的 React-Router V6 并遇到了如此-

回答 2 投票 0

React + MSAL + React Router 6.4.1(最新版本)加载器功能问题

亲爱的 React 开发者们。 当您需要时,有人可以解释或展示在当前最新版本 6.4.1 中将 MSAL 与 React Router 结合使用时的最佳方法吗...

回答 1 投票 0

如何在深度嵌套的React路由器对象中隐藏父级?

我想知道是否有更好的方法来隐藏/不渲染反应路由器对象中的父内容。我可以通过条件渲染来解决它,但我不确定这是最好的方法。我有父母,...

回答 1 投票 0

REACTJS 给出以下错误:TypeError: navigator.push is not a function

我正在尝试为我的react.js 网站实现一个主页。我的布局很好,我的代码编译没有问题。 但是,当我单击按钮时,我在网站上收到以下错误

回答 3 投票 0

出现空白页。用户未重定向到登录

我试图在用户访问网站的任何部分之前对用户进行身份验证,但出现空白页面并且用户没有重定向。 代码: 认证功能: 导入{重定向...

回答 1 投票 0

TypeScript 类型缺少以下属性

我正在实现一个 React Router,需要将一些参数从 url 路径传递给函数。 我的函数需要以下类型的参数: 接口路径参数{ appTypeId:字符串|...

回答 1 投票 0

TypeScrip Type 缺少以下属性

我正在实现一个 React Router,需要将一些参数从 url 路径传递给函数。 我的函数需要以下类型的参数: 接口路径参数{ appTypeId:字符串|...

回答 1 投票 0

React Router - 仅在路径参数存在时调用加载器函数

我正在实现新的 React Router。我正在使用加载器函数来根据正在加载的元素来获取数据。 我想要发生的是,无论某些 api 的路由如何,都应该...

回答 1 投票 0

从 URL 参数调用 API

我正在使用最新版本的 React Router,并且想从 URL 字符串中获取一些可选参数。 有两个参数,appTypeId 和submissionId,它们都是可选的,但是它们...

回答 1 投票 0

如何模糊匹配路由路径

我正在使用 React Router v5,我想知道如何在一个路径中同时匹配 /add_a 和 /add 。 我已经尝试过 TEST} />,但我收到了警告...

回答 1 投票 0

reactjs - 在单元测试中使用 getByRole 查找 Navlink

在我的 React 测试库单元测试中,我无法按角色获取 Navlink。 getByRole('link', { name: 'help' }) - 失败 导航链接没有文本,而是有一个帮助图标,看起来......

回答 1 投票 0

如何使用 Enzyme 为 React Router 创建 URL 参数的单元测试

我正在尝试使用 React Router 的 Enzyme 来测试 url 参数。到目前为止,该应用程序很简单。我有 App.jsx,它有一个 组件,还有一个 组件和 t...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.