javascript - 在渲染链接到 Navlink 的组件之前隐藏当前组件 - React Router
问题描述
我正在构建一个基于反应路由的单页 Web 应用程序,我想在渲染下一个组件之前隐藏当前组件,该组件应该在单击 Navlink 后呈现,就像<a href="someLink">
在 html 中一样。但是,我当前的组件并没有消失,并且下一个组件呈现在当前组件旁边的同一页面上。
我的 app.js 代码(父类呈现的主文件)
import React from 'react';
import {Parent} from './Parent';
import { BrowserRouter as Router, Route, NavLink} from 'react-router-dom';
function App() {
return (
<div className="App">
<header className="App-header">
<Router>
<NavLink to="/Edit">Edit</NavLink>
<Route path="/Edit" component={Edit}/>
</Router>
</header>
</div>
);
}
export default App;
这是我的 parent.js 代码-
import React from 'react';
import {Child} from './Child';
import { BrowserRouter as Router, Route, NavLink} from 'react-router-dom';
class Parent extends React.Component{
constructor(props) {
super(props);
}
render(){
return(
<div>
<p>Parent Render</p>
<Router>
<NavLink to="/Parent/Child">Child</NavLink>
<Route path="/Parent/Child" component={Child}/>
</Router>
)
}
}
export {Parent}
Child.js
import React from 'react';
class Child extends React.Component{
constructor(props) {
super(props);
}
render(){
return(
<div>
Child Render
</div>
)}
}
export{Child}
app.js 中没有问题。问题是当子导航链接被点击时,父级并没有消失
解决方案
我认为解决它的最佳方法是像这样将带有 BrowserRouter 的 App.js 组件包装在 index.js 文件中。
//index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { BrowserRouter as Router } from "react-router-dom";
ReactDOM.render(
<React.StrictMode>
<Router>
<App />
</Router>
</React.StrictMode>,
document.getElementById("root")
);
随后,您可以通过像这样将所有组件包装在组件中来使用您希望拥有的所有路由来更新您的 App.js 组件Route
。
//App.js
import React from "react";
import { Parent } from "./Parent";
import { BrowserRouter as Router, Route, NavLink } from "react-router-dom";
import Home './Home'
import Edit from './Edit'
import Parent from './Parent'
function App() {
return (
<div className="App">
<Switch>
<Route exact path="/" component={Home} />
<Route path="/Edit" component={Edit} />
<Route path="/parent" component={Parent} />
</Switch>
</div>
);
}
export default App;
现在您不必用 包装您的子组件,您可以在 App.js<Router />
中创建尽可能多的组件并使用它来导航到该链接。<Routes />
<Link />
推荐阅读
- java - Java注解创建构造函数
- c++ - 标头中声明的非模板函数用于导致 /bin/ld 的模板函数:DWARF 错误:找不到变量规范
- linux - 在linux中创建每日日志脚本
- c++ - 打开 cv 不读取图像
- python - Django Crispy Forms:为文本区域设置行
- javascript - 在 Vue 中使用 Cloud Firestore 更新布尔值
- maven - 在环境变量中添加 java/bin 路径
- python - 如何使用 discord.py 重写中的类中的方法创建命令?
- python - Python Multiprocessing:多次执行具有随机性的函数并获得相同的结果
- swi-prolog - 声明模块本地化运算符时 SWI-Prolog 失败