正如标题所述,我曾经有一个带有状态组件的页面,该组件根据对url的更改获得不同的profiles。
现在,升级到React路由器v6,我真的不明白如何使它再次工作.我知道现在解决这个问题的唯一方法是使用诸如useNavigate之类的钩子,但我不知道如何在我的代码中实现这一点。我已经阅读了react-router v6文档,仍然不明白如何解决我的问题。
下面的代码。代码从子组件排序,直到index. tsx。组件是广泛的,基本上是一个statfulcomponent,它从props中获取其状态。并根据给定的 prop ,它将相应地显示其内容。
有人能为我的设置建议一个解决方案吗?
*CalculatorPage.tsx
import Calculator from "../components/Calculator";
import { Route, Routes } from "react-router";
import { Link } from "react-router-dom";
import { FlowrateCalc } from "../calc/calculators/FlowrateCalc";
import { ValveKvsCalc } from "../calc/calculators/ValveKvsCalc";
import { AccelerationCalc } from "../calc/calculators/AccelerationCalc";
export default function CalculatorPage() {
return (
<div>
{/* when changing links, there is no props being sent to Calculator. Calculator is a STATEFUL component*/}
<Routes>
<Route
path={"flow"}
element={<Calculator {...FlowrateCalc} />}
/>
<Route
path={"kvs"}
element={<Calculator {...ValveKvsCalc} />}
/>
<Route
path={"acceleration"}
element={<Calculator {...AccelerationCalc} />}
/>
</Routes>
<Link to={"flow"}>
<button style={{ color: "green" }}>flow</button>
</Link>
<Link to={"kvs"}>
<button style={{ color: "red" }}>kvs</button>
</Link>
<Link to={"acceleration"}>
<button style={{ color: "blue" }}>acceleration</button>
</Link>
</div>
);
}
Main.tsx
import { Route , Routes} from "react-router-dom";
import HomePage from "../pages/HomePage";
import CalculatorPage from "../pages/CalculatorPage";
import AboutPage from "../pages/AboutPage";
export default function Main() {
return (
<div>
<Routes>
<Route path="/" element={<HomePage/>} />
<Route path="/calculator/*" element={<CalculatorPage/>} />
<Route path="/about" element={<AboutPage/>} />
</Routes>
</div>
);
}
App.tsx
import { BrowserRouter } from "react-router-dom";
import Header from "./layout/Header";
import Footer from "./layout/Footer";
import Main from "./layout/Main";
export default function App() {
return (
<div>
<BrowserRouter>
<Header />
<Main />
<Footer />
</BrowserRouter>
</div>
);
}
Index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { Provider } from "react-redux";
import { store } from './state';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
reportWebVitals();
5条答案
按热度按时间iyfamqjs1#
除非有人有另一个答案,否则似乎没有这样的解决办法。从react router v6开始,没有通过router传递 prop 。相反,我们必须使用功能组件和React路由器钩子来检测url的变化。
guicsvcw2#
你绝对可以把 prop 传递给路由器的组件...
检查一下:
然后在Page.js中:
它看起来像以前一样工作。* 耸耸肩 *
dly7yett3#
您可以使用react-router-dom提供的钩子从URL中提取参数数据。
这允许您从URL中提取数据
这个官方文档链接也可能对你有帮助
zu0ti5jz4#
您可以创建一个商店,如果需要,
useSelector
钩子可以在那个时候帮助您。通过使用
useSelector
,您可以轻松地获得商店的状态。用途:
i34xakig5#
不幸的是,在react router dom的v6中,我们不能使用像path这样的属性。如果你想使用参数,你可以使用钩子:导入useParams
const { id } = useParams();