当使用来自 react-router-dom 的 <Link /> 时,如何修复此 React 组件无法正确呈现?
How can I fix this React component not rendering properly when using <Link /> from react-router-dom?
我正在尝试在 React 中构建一个摄影作品集,但是,我不确定我是否正确使用了 Link 函数。每当我在网站上单击 link 时,它只会将新页面覆盖在旧页面上。我该如何修复它,使其重新呈现新页面而看不到旧页面?
例如,当我在主页上点击一个link时,新出现的是这样的:
我已将整个应用程序打包到 index.js 文件中。
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById("root")
);
我已经在 app.js 中添加了路由并将它们包装在一个开关中。我还用 withRouter.
包装了 app.js 组件
class App extends Component {
render() {
let routes = (
<switch>
<Route path="/" component={Home} />
<Route path="/Portfolio/Astro" component={Astro} />
<Route path="/Portfolio/Travel" component={Travel} />
<Redirect to="/" />
</switch>
);
return (
<div className="App">
<Layout>
<Switch>{routes}</Switch>
</Layout>
</div>
);
}
}
export default withRouter(App);
布局组件将工具栏添加到屏幕顶部:
class Layout extends Component {
render() {
return (
<Aux>
<Toolbar />
<main className={classes.Content}>{this.props.children}</main>
</Aux>
);
}
}
export default Layout;
而 navlinks 组件在按下时具有汉堡菜单的所有 links:
const NavLinks = ({ toggle, nav }) => {
let style;
if (nav) {
style = {
transform: `translate(0)`,
opacity: 1,
};
}
return (
<nav className="nav-slide" style={style}>
<div className="page-links">
<Link onClick={toggle} to="/" className={`link-page ${nav ? "link-page-open" : ""}`}>
Home
</Link>
<Link onClick={toggle} to="/Portfolio/Astro" className={`link-page ${nav ? "link-page-open" : ""}`}>
Astro
</Link>
<Link onClick={toggle} to="/Portfolio/Travel" className={`link-page ${nav ? "link-page-open" : ""}`}>
Travel
</Link>
</div>
</nav>
);
};
export default NavLinks;
还补充了@Dov Royal 所说的内容,您不需要 <switch>
包装器。 <Switch>
包装器就足够了
这是因为你在两个部分中使用了 switch。我建议你正确阅读 react-router-dom 文档。 custom-link in react-router-dom
我正在尝试在 React 中构建一个摄影作品集,但是,我不确定我是否正确使用了 Link 函数。每当我在网站上单击 link 时,它只会将新页面覆盖在旧页面上。我该如何修复它,使其重新呈现新页面而看不到旧页面?
例如,当我在主页上点击一个link时,新出现的是这样的:
我已将整个应用程序打包到 index.js 文件中。
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById("root")
);
我已经在 app.js 中添加了路由并将它们包装在一个开关中。我还用 withRouter.
包装了 app.js 组件class App extends Component {
render() {
let routes = (
<switch>
<Route path="/" component={Home} />
<Route path="/Portfolio/Astro" component={Astro} />
<Route path="/Portfolio/Travel" component={Travel} />
<Redirect to="/" />
</switch>
);
return (
<div className="App">
<Layout>
<Switch>{routes}</Switch>
</Layout>
</div>
);
}
}
export default withRouter(App);
布局组件将工具栏添加到屏幕顶部:
class Layout extends Component {
render() {
return (
<Aux>
<Toolbar />
<main className={classes.Content}>{this.props.children}</main>
</Aux>
);
}
}
export default Layout;
而 navlinks 组件在按下时具有汉堡菜单的所有 links:
const NavLinks = ({ toggle, nav }) => {
let style;
if (nav) {
style = {
transform: `translate(0)`,
opacity: 1,
};
}
return (
<nav className="nav-slide" style={style}>
<div className="page-links">
<Link onClick={toggle} to="/" className={`link-page ${nav ? "link-page-open" : ""}`}>
Home
</Link>
<Link onClick={toggle} to="/Portfolio/Astro" className={`link-page ${nav ? "link-page-open" : ""}`}>
Astro
</Link>
<Link onClick={toggle} to="/Portfolio/Travel" className={`link-page ${nav ? "link-page-open" : ""}`}>
Travel
</Link>
</div>
</nav>
);
};
export default NavLinks;
还补充了@Dov Royal 所说的内容,您不需要 <switch>
包装器。 <Switch>
包装器就足够了
这是因为你在两个部分中使用了 switch。我建议你正确阅读 react-router-dom 文档。 custom-link in react-router-dom