标签: react-router-dom

从子级获取父级路由路径(react-router-V6)


V6相关问题!

我有嵌套路由,在子组件中我有选项卡组件...我需要在使用 navigator(...) 之前获取父级的路径

如果我单击导航所有作品,我将在(/View/test1 和 /View/test2 和 /View/test3 )之间切换

但我需要在单击任何选项卡之前获取父路径...因为我的选项卡组件使用相对路径,我需要突出显示它是否处于活动状态。

有没有获取父路由路径的钩子?我正在寻找诸如 usegetParrentPath() 之类的东西或一些可以构建该路线的函数...

function GetTabs() {
  return [
    {
      label: "Test1",
      path: `Test1`,
    },
    {
      label: "Test2",
      path: `Test2`,
    },
    {
      label: "Test3",
      path: `Test3`,
    },
  ] as RouterTabItemType[];
}

function App(){
<Routes>
  <Route path "/View/*" element={<View/>
<Routes>
}

function View(){
<Routes>
  <Route path "test1" element={<Test1/> // Full path will be /View/test1
  <Route path "test2" element={<Test2/> // Full path will be /View/test2
  <Route path "test3" element={<Test3/> // Full path …
Run Code Online (Sandbox Code Playgroud)

react-router react-router-dom

9
推荐指数
0
解决办法
2495
查看次数

如何使用先前的位置在 React Router v6 中重定向用户?

React: 17.0.2
React Router: 6
Run Code Online (Sandbox Code Playgroud)

示例:用户经过身份验证并尝试通过 URL 访问“/page2”。他们应该通过 PrivateRoute 流并到达“/page2”。

代码:

const PublicRoutes = () => {
  const { auth } = useAuth()

  return auth ? <Navigate to={'/home'} replace /> : <Outlet />
}

const PrivateRoutes = () => {
  const { auth } = useAuth()

  return auth ? <Outlet /> : <Navigate to={'/signin'} replace />
}

export const Router = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route element={
          <PublicLayout>
            <PublicRoutes />
          </PublicLayout>
        }>
          <Route path='/' element={<GetStarted />} /> …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-router-dom

9
推荐指数
1
解决办法
1万
查看次数

交换机还是路由?React Router 是哪个?

我无法将“Switch”或“Routes”与react router(特别是react-router-dom)一起使用。因为对于使用哪一个,交换机还是路由似乎有点混乱,所以我决定尝试两者来尝试到达某个地方。

我正在使用react-router-dom版本:

"react-router-dom": "^6.2.1",
Run Code Online (Sandbox Code Playgroud)

如果我像这样导入:

import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'
Run Code Online (Sandbox Code Playgroud)

编译器说Cannot resolve symbol 'Routes'

如果我像这样导入 Switch :

import { BrowserRouter as Router, Route, Switch} from 'react-router-dom'
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误export 'Switch' (imported as 'Switch') was not found in 'react-router-dom'

这是版本中的一些错误吗?

********** 更新 ***********

我已经回滚到 React Router/Dom 版本 5.2.0。

6.x 版本似乎太糟糕了。

例如,在 @type 模块中安装版本 6.x 会安装错误的类型。

"name": "@types/react-router",
"version": "5.1.17",
Run Code Online (Sandbox Code Playgroud)

这是错误的并且使我的 IDE 感到困惑。

typescript react-router react-router-dom

9
推荐指数
2
解决办法
1万
查看次数

React JS React-router-dom 导航不工作

我尝试在登录我的 React 应用程序后重定向用户,但导航不起作用,我不知道为什么......

这是我的代码,感谢您的帮助

import React, { Component } from "react";
import {Route, Navigate} from 'react-router-dom';
import Bouton from "../components/Bouton";

class Dallan extends Component{
    logout = () =>{
        localStorage.removeItem('logged');
        return <Navigate to= '/login' />;
    }
    render(){
        return(
            <Bouton typeBtn = 'btn-danger' click={() => this.logout()}>Deconnexion</Bouton>
        )
    }
}

export default Dallan;
Run Code Online (Sandbox Code Playgroud)

在我的 App.js 中


function App() {
  let session = localStorage.getItem('logged');
  return (
    <BrowserRouter>
    <Routes>
    <Route path="/" element={session ? <Navigate to="/dallan" /> : <Login/>} />
       <Route path='/dallan' element={<Dallan/>}/>
    </Routes>
    </BrowserRouter>
 
  ); …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-router-dom

9
推荐指数
1
解决办法
4万
查看次数

React router v6 以编程方式重定向

我在/customerOrders/13页面中,从那里我尝试重定向到/customerOrders/14使用navigate('/customerOrders/14'). 即使 URL 已更新,页面也不会重定向到/customerOrders/14.

以下是我从代码库中提取的与此相关的代码片段。

应用程序.js

import {
  BrowserRouter,
  Routes,
  Route
} from "react-router-dom";
...
<BrowserRouter>
    <Routes>
        <Route path="customerOrders/:id" element={<CustomerOrderForm />}></Route>
    </Routes>
<Router>
Run Code Online (Sandbox Code Playgroud)

客户订单表格.jsx

import { useNavigate  } from "react-router-dom";
...

const CustomerOrderForm = () => {
    let navigate = useNavigate();

    const save = async () => {
        //
        // logic to persist data goes here...
        //

        navigate(`/customerOrders/${customerOrderId}`);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

reactjs react-router-dom

9
推荐指数
1
解决办法
1万
查看次数

ReactJS:在react-rooter-dom中,useHistory是否已弃用?

使用此代码:

import { Link, useHistory } from "react-router-dom";
Run Code Online (Sandbox Code Playgroud)

...

const history = useHistory();
Run Code Online (Sandbox Code Playgroud)

...

history.push("/login");
Run Code Online (Sandbox Code Playgroud)

显示此错误:

在此输入图像描述

useHistory 过时了吗?或者我确实需要使用另一个功能?

reactjs react-router react-router-dom

9
推荐指数
1
解决办法
6889
查看次数

如何在历史菜单中更改React-Router v6+页面的标题

SO 上有一些类似的问题,但它们已经过时且陈旧,解决方案不再有效

如何更改页面标题,以免“历史记录”菜单中出现相同的名称?

我在我尝试过的文档中找不到任何内容:

<Link to="/home" title="Home"/>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我正在查看代码:

<Link to="/home" title="Home"/>
Run Code Online (Sandbox Code Playgroud)

没有标题,只有状态对象。

该状态在 v5 的迁移指南中可见,但没有说明它的用途。我猜这是一个历史状态对象,但它与标题 AFAIK 无关。

有什么办法可以改变历史的标题吗?对于修改历史标题的路由库来说,这似乎是很常见的行为。

reactjs react-router react-router-dom

9
推荐指数
1
解决办法
1万
查看次数

您应该在 React.useEffect() 中调用 navigator(),而不是在组件首次渲染时调用。(反应+ReactROuterDom v6)

所以一开始这可能很难理解,但我会尽力解释一切可能的事情。我正在渲染一个使用库useNavigation中的钩子的应用程序组件react-router-dom。在内部AppRoutes,我检查是否有$stateParams.redirect其他值,例如param1和。我从应用程序中定义的另一个自定义挂钩param2获取。$stateParams运行应用程序时,我收到日志,should navigate now但它实际上没有导航到decider-route页面,而是停留在组件/所在的位置<Home />。另外,我在控制台中收到此警告,You should call navigate() in a React.useEffect(), not when your component is first rendered.我想知道为什么不进行导航,decider-route并且警告是不进行导航的原因?

    const App = () => {
        return (
        <MemoryRouter>
          <AppRoutes />
        </MemoryRouter>
      )
    }
    
    const AppRoutes = () => {
      const navigate = useNavigate()                // react-router-dom v6
    
      if ($stateParams.redirect) {
        if ($stateParams.param1 && $stateParams.param2) {
          console.log('StateParams : …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router-dom react-hooks

9
推荐指数
1
解决办法
3万
查看次数

如果两个路径使用相同的元素,React 路由器不会重新加载组件

我设置了以下两条路径

<Route path="bookings/:bookingnumber" element={<Bookings />} />
<Route path="bookings" element={<Bookings />} />
Run Code Online (Sandbox Code Playgroud)

Bookings组件中,我编写了条件代码来检查参数是否:bookingnumber已传递,然后它仅显示与该预订号码相关的结果。否则,如果不传递任何参数,则显示所有预订的所有结果。

我用来Outlet在主区域中显示这些组件,并且可以从侧边栏中选择这两个路径。

假设我有10 results,如果我去/bookings2 results如果我去/bookings/123

但是,如果我先转到/bookings/123然后再转到,/bookings它只会继续显示2 results(该组件不会重新加载,但我可以看到浏览器中的 URL 发生变化)

reactjs react-router react-router-dom

9
推荐指数
2
解决办法
4673
查看次数

BrowserRouter - 类型 '{children: Element; }' 与类型 'IntrinsicAttributes 没有共同的属性

我已将 React 版本升级到 18,并从 BrowserRouter 组件中收到一些类型错误,尝试了不同的方法,但无法识别问题所在。

下面是我调试代码时的错误,

     Overload 1 of 2, '(props: BrowserRouterProps | Readonly<BrowserRouterProps>): BrowserRouter', gave the following error.
    Type '{ children: Element; }' has no properties in common with type 'IntrinsicAttributes & IntrinsicClassAttributes<BrowserRouter> & Readonly<BrowserRouterProps>'.
  Overload 2 of 2, '(props: BrowserRouterProps, context: any): BrowserRouter', gave the following error.
    Type '{ children: Element; }' has no properties in common with type 'IntrinsicAttributes & IntrinsicClassAttributes<BrowserRouter> & Readonly<BrowserRouterProps>'.
Run Code Online (Sandbox Code Playgroud)

错误信息

如果能伸出援助之手,我将不胜感激。

typescript reactjs react-router react-router-dom react-typescript

9
推荐指数
1
解决办法
949
查看次数