javascript - 网站仅在重新加载后更改 - 反应路由器
问题描述
我想制作一个导航栏,其中包含指向不同路线的不同链接。在另一个文件中,我有 react-router 的东西来更改网站。但是当我按下链接时它可以工作,但前提是我之后重新加载。
头文件:
export default function Head(props){
return(
<Router>
<div className="Head">
<div className="HeadItemFirst">bwftp</div>
<div className="HeadPaths">
<Link className="HeadItem" to="/"><div>Start</div></Link>
<Link className="HeadItem" to="/about"><div>about</div></Link>
<Link className="HeadItem" to="/settings"><div>Settings</div></Link>
</div>
</div>
</Router>
)
}
和应用程序文件:
export default function App(){
return(
<div className="App">
<Head />{/* Here are all the links in a navbar stored */}
<Body />
<Foot />
<Router>
<Switch>
<Route path="/" exact component={Home}/>
<Route path="/about" exact component={About}/>
<Route path="/settings" exact component={Settings}/>
<Route render={()=>(<h1>404</h1>)}/>
</Switch>
</Router>
</div>
)
}
解决方案
您无需在应用程序中使用多个路由器实例。而是在最顶层的父级设置一个。如果使用多条Route,Head里面的Link组件只会和Router
里面的组件通信,Head
不会中继信息route change to Router in App
此外,如果您将 Head 渲染为默认 Route,它将接收来自 Route 的所有道具,并确保 Routes 的顺利运行
export default function Head(props){
return(
<div className="Head">
<div className="HeadItemFirst">bwftp</div>
<div className="HeadPaths">
<Link className="HeadItem" to="/"><div>Start</div></Link>
<Link className="HeadItem" to="/about"><div>about</div></Link>
<Link className="HeadItem" to="/settings"><div>Settings</div></Link>
</div>
</div>
)
}
export default function App(){
return(
<Router>
<div className="App">
<Route component={Head} /> //Render as a default route so that it gets route params
<Body />
<Foot />
<Switch>
<Route path="/" exact component={Home}/>
<Route path="/about" exact component={About}/>
<Route path="/settings" exact component={Settings}/>
<Route render={()=>(<h1>404</h1>)}/>
</Switch>
</div>
</Router>
)
}
推荐阅读
- flutter - PageController 在发布模式下不工作
- python - 如何对 PrimaryKeyRelatedField 序列化程序进行验证
- java - 使用 Java 将 XPS 文件转换为文本
- jquery - Weatherwidget.io - 单击按钮时不重新加载 iframe
- html - Bootstrap-datetimepicker 插件会打开一个位于手风琴下方的框。如何使它在手风琴顶部可见?
- android - Gradle 插件如何触发自定义任务?
- android - 如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?
- r - 在 GCE 托管的 google colab Jupyter notebook 上安装 R 包
- javascript - 如何从 axios 上传 2 个文件?
- apache-kafka - Pyflink 1.14 表连接器 - Kafka 身份验证