Sim*_*mon 6 reactjs react-router react-router-dom
尽管检查了堆栈溢出上已经发布的所有答案,但我找不到适合我的案例的解决方案,所以我将发布它。
我正在使用“react-router (v6)”中的 {Router}以便能够使用自定义历史记录对象在我的 redux 操作中进行导航。
这是我的文件:
索引.tsx
import { Router } from 'react-router';
import myHistory from './utils/history';
ReactDOM.render(
<Provider store={store}>
<Router navigator={myHistory} location={myHistory.location}>
<App />
</Router>
</Provider>,
document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)
应用程序.tsx
import MainNavigation from './components/navigations/MainNavigation';
import Routes from './routes/Routes';
const App = () => {
return (
<>
<MainNavigation />
<Routes />
</>
);
};
export default App;
Run Code Online (Sandbox Code Playgroud)
主导航.tsx
import { Link } from 'react-router-dom';
const MainNavigation = () => {
return (
<nav className='navigation'>
<ul>
<li>
<Link to='/'>Home</Link>
</li>
<li>
<Link to='/contact'>Contact</Link>
</li>
<li>
<Link to='/about'>A propos</Link>
</li>
<li>
<Link to='/user-profile'>Votre compte</Link>
</li>
</ul>
</nav>
);
};
export default MainNavigation;
Run Code Online (Sandbox Code Playgroud)
路由.ts
import { Route, Routes as Routing } from 'react-router';
const Routes = () => {
return (
<Routing>
<Route path='/' element={<Home />} />
<Route path='/about' element={<About />} />
<Route path='/contact' element={<ContactForm />} />
<Route path='/user-profile' element={<UserAccount />} />
{/* <Route path='*' component={Error404} /> */}
{/* <Navigate to='/' /> */}
</Routing>
);
};
export default Routes;
Run Code Online (Sandbox Code Playgroud)
问题:当我单击其中一个链接时,网址会更改为相应的路径,但组件不会呈现。我必须刷新页面才能真正显示出来。我真的不知道发生了什么事。
谢谢。
如果您想使用“/”路线,则需要包含“index”。
<Route path='/about' index element={<About />} />
此外,React Router v6 与 v5 完全不同。它切换到新的基于出口的路由。为了显示您的页面,您需要在注册的 Route 组件中有一个 Outlet。例如,在app.js组件中,您需要添加<Outlet />才能渲染这些页面。
我喜欢将新路由视为基于容器的导航。因此创建一个名为 AboutContainer 的组件。包含<Outlet />在此组件中。
export const AboutContainer = () => (
<Outlet />
)
Run Code Online (Sandbox Code Playgroud)
然后,添加一个名为 AboutPage 的组件,并将您的关于页面逻辑放入其中。在您的路由中,将此“关于”页面作为新路由嵌套在您的 AboutContainer Router 逻辑中;
<Routes>
<Route path='/about' element={<AboutContainer />}>
<Route path='/' index element={<AboutPage />} />
</Route>
...
</Routes>
Run Code Online (Sandbox Code Playgroud)
这意味着每次导航到 /about 时,都会显示 AboutPage 组件。更进一步,添加一条额外的路线
<Routes>
<Route path='/about' element={<AboutContainer />}>
<Route path='/' index element={<AboutPage />} />
<Route path='/you' index element={<AboutYouPage />} />
</Route>
...
</Routes>
Run Code Online (Sandbox Code Playgroud)
这就是 React Router 6 现在处理路由的方式
| 归档时间: |
|
| 查看次数: |
7773 次 |
| 最近记录: |