React Router 更改了 URL 地址,但它呈现了另一个组件 - Material ui V.5.0
React Router changes the URL address but it renders another component - Material ui V. 5.0
我对 React 18.0 中的路由感到头疼,我使用的是 react-router-dom
v.5.0 和 Material ui - 5.0。 组件 Login 不呈现, 而是呈现另一个组件“CreateNotes
”。 URL 显示 /login
,组件“CreateNotes”被渲染。所有的路线都是正确的。此外,当我单击另一个 menuItem(“Banks”)时,它会转到正确的路线 "/bancos"
,但它仍然呈现相同的组件 "[=16] =]",路线 "/bancos"
在 URL 上。似乎卡在了这条路线上。我将只包括很长的代码的必要部分。谢谢你的帮助。总结:单击注销(呈现登录页面)呈现“CreateNote”并且 url 显示 /login
。单击银行也会发生同样的情况。为什么?
APP.JS
import Notes from './pages/Notes';
import CreateNotes from './pages/CreateNotes';
import React from 'react';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
import Layout from './components/Layout';
import Login from './pages/Login';
import Bancos from './pages/Bancos';
import { createTheme, ThemeProvider } from '@mui/material/styles';
function App() {
return (
<ThemeProvider theme={theme}>
<Router>
<Layout>
<Switch>
<Route exact path="/" component={ Notes } />
<Link to="/create" component={ CreateNotes } />
<Route exact path="/bancos" component={ Bancos } />
<Route exact path="/login" component={ Login } />
</Switch>
</Layout>
</Router>
</ThemeProvider>
);
}
export default App;
链接
<Link to="/login" style={{ textDecoration: "none", color: "white" }}>
<Button type="button" variant="text"
sx={{ bgcolor: "#1483dd", color: "#ffffff", mt:1, marginRight: 11 }}>
{/* // onClick={() => { history.push('/login')}} didn't work */}
Logout
</Button>
</Link>
// this link is at the app-bar menu
// The code below is in the Drawer:
const fileItems = [
{
text: 'Bancos',
icon: <AccountBalanceRoundedIcon style={{color: '#e2e7ea'}} />,
path: '/bancos',
},
{
text: 'Centro de Custos',
icon: <AttachMoneyIcon style={{color: '#e2e7ea'}} />,
path: '/custos',
},
{
text: 'Clientes',
icon: <PeopleAltIcon style={{color: '#e2e7ea'}} />,
path: '/clientes',
},
]
<List dense>
{fileItems.map((item) => (
<ListItem
button
dense
key={item.text}
onClick={() => history.push(item.path)}
className={location.pathname == item.path ? classes.active : null}
>
<ListItemIcon>{item.icon}</ListItemIcon>
<ListItemText primary={item.text} className='listItem'/>
</ListItem>
))}
</List>
// "/bancos" does not render
看起来您的组件使用不是预期的。您是要使用 Route 吗?
Link prop component 是自定义 Link 本身,而不是渲染整个页面。您的 Switch 组件应该 仅 呈现路由。
截至目前,它呈现路由 + 您的 Link 组件,该组件实际上呈现整个 CreateNotes 页面。
我对 React 18.0 中的路由感到头疼,我使用的是 react-router-dom
v.5.0 和 Material ui - 5.0。 组件 Login 不呈现, 而是呈现另一个组件“CreateNotes
”。 URL 显示 /login
,组件“CreateNotes”被渲染。所有的路线都是正确的。此外,当我单击另一个 menuItem(“Banks”)时,它会转到正确的路线 "/bancos"
,但它仍然呈现相同的组件 "[=16] =]",路线 "/bancos"
在 URL 上。似乎卡在了这条路线上。我将只包括很长的代码的必要部分。谢谢你的帮助。总结:单击注销(呈现登录页面)呈现“CreateNote”并且 url 显示 /login
。单击银行也会发生同样的情况。为什么?
APP.JS
import Notes from './pages/Notes';
import CreateNotes from './pages/CreateNotes';
import React from 'react';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
import Layout from './components/Layout';
import Login from './pages/Login';
import Bancos from './pages/Bancos';
import { createTheme, ThemeProvider } from '@mui/material/styles';
function App() {
return (
<ThemeProvider theme={theme}>
<Router>
<Layout>
<Switch>
<Route exact path="/" component={ Notes } />
<Link to="/create" component={ CreateNotes } />
<Route exact path="/bancos" component={ Bancos } />
<Route exact path="/login" component={ Login } />
</Switch>
</Layout>
</Router>
</ThemeProvider>
);
}
export default App;
链接
<Link to="/login" style={{ textDecoration: "none", color: "white" }}>
<Button type="button" variant="text"
sx={{ bgcolor: "#1483dd", color: "#ffffff", mt:1, marginRight: 11 }}>
{/* // onClick={() => { history.push('/login')}} didn't work */}
Logout
</Button>
</Link>
// this link is at the app-bar menu
// The code below is in the Drawer:
const fileItems = [
{
text: 'Bancos',
icon: <AccountBalanceRoundedIcon style={{color: '#e2e7ea'}} />,
path: '/bancos',
},
{
text: 'Centro de Custos',
icon: <AttachMoneyIcon style={{color: '#e2e7ea'}} />,
path: '/custos',
},
{
text: 'Clientes',
icon: <PeopleAltIcon style={{color: '#e2e7ea'}} />,
path: '/clientes',
},
]
<List dense>
{fileItems.map((item) => (
<ListItem
button
dense
key={item.text}
onClick={() => history.push(item.path)}
className={location.pathname == item.path ? classes.active : null}
>
<ListItemIcon>{item.icon}</ListItemIcon>
<ListItemText primary={item.text} className='listItem'/>
</ListItem>
))}
</List>
// "/bancos" does not render
看起来您的组件使用不是预期的。您是要使用 Route 吗?
Link prop component 是自定义 Link 本身,而不是渲染整个页面。您的 Switch 组件应该 仅 呈现路由。
截至目前,它呈现路由 + 您的 Link 组件,该组件实际上呈现整个 CreateNotes 页面。