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: 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) 我无法将“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 感到困惑。
我尝试在登录我的 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) 我在/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) 使用此代码:
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 过时了吗?或者我确实需要使用另一个功能?
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 无关。
有什么办法可以改变历史的标题吗?对于修改历史标题的路由库来说,这似乎是很常见的行为。
所以一开始这可能很难理解,但我会尽力解释一切可能的事情。我正在渲染一个使用库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) 我设置了以下两条路径
<Route path="bookings/:bookingnumber" element={<Bookings />} />
<Route path="bookings" element={<Bookings />} />
Run Code Online (Sandbox Code Playgroud)
在Bookings组件中,我编写了条件代码来检查参数是否:bookingnumber已传递,然后它仅显示与该预订号码相关的结果。否则,如果不传递任何参数,则显示所有预订的所有结果。
我用来Outlet在主区域中显示这些组件,并且可以从侧边栏中选择这两个路径。
假设我有10 results,如果我去/bookings,2 results如果我去/bookings/123。
但是,如果我先转到/bookings/123然后再转到,/bookings它只会继续显示2 results(该组件不会重新加载,但我可以看到浏览器中的 URL 发生变化)
我已将 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