- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的项目中,我必须在不更改 url 的情况下从一个组件导航到另一个组件。为此,我使用了 MemoryRouter
这按预期工作。但现在同样的想法应该适用于不同的路线,即 /one
和 /two
.例如,
/one --> BrowserRouter (url change visible)
/
/first
/second
/third
/two --> BrowserRouter (url change visible)
/
/first
/second
/third
/one
和
/two
,已经建立的工作内存路由(即
/
、
/first
、
/second
、
/third
)应该按照
/one
中提供的相应数据正常工作和
/two
.
<BrowserRouter>
<Switch>
<Route path="/one" render={() => <MemoryComp configFor="Dave"></MemoryComp>}></Route>
<Route path="/two" render={() => <MemoryComp configFor="Mike"></MemoryComp>}></Route>
</Switch>
</BrowserRouter>
MemoryComp
持有:
<MemoryRouter history={customHistory}>
<Switch>
<Route path="/" render={(props) => <InitPage configFor={this.props.configFor} history={props.history}></InitPage>}></Route>
<Route path="/first" component={FirstPage}></Route>
<Route path="/second" component={SecondPage}></Route>
<Route path="/third" component={ThirdPage}></Route>
</Switch>
</MemoryRouter>
history
来实现相同的效果)import React, { Component } from 'react';
import { render } from 'react-dom';
import './style.css';
import { BrowserRouter, MemoryRouter, Route, Switch } from 'react-router-dom';
import { createBrowserHistory } from "history";
const customHistory = createBrowserHistory();
class MemoryComp extends Component{
render(){
return(
<MemoryRouter history={customHistory}>
<Switch>
<Route path="/" render={(props) => <InitPage configFor={this.props.configFor} history={props.history}></InitPage>}></Route>
<Route path="/first" component={FirstPage}></Route>
<Route path="/second" component={SecondPage}></Route>
<Route path="/third" component={ThirdPage}></Route>
</Switch>
</MemoryRouter>
);
}
}
class InitPage extends Component{
render(){
return (
<>
<ul>
<li onClick={() => this.navigateTo("/")}>Init</li>
<li onClick={() => this.navigateTo("/first")}>First</li>
<li onClick={() => this.navigateTo("/second")}>Second</li>
<li onClick={() => this.navigateTo("/third")}>Third</li>
</ul>
<div>{this.props.configFor}</div>
</>
)
}
navigateTo(path){
this.props.history.push(path, {
data: {
configFor: this.props.configFor
}
})
}
}
class FirstPage extends Component{
constructor(props){
super(props);
this.data = this.props.history.location.state.data;
}
render(){
return (
<>
<ul>
<li onClick={() => this.navigateTo("/")}>Init</li>
<li onClick={() => this.navigateTo("/first")}>First</li>
<li onClick={() => this.navigateTo("/second")}>Second</li>
<li onClick={() => this.navigateTo("/third")}>Third</li>
</ul>
<div>first page</div>
</>
)
}
navigateTo(path){
this.props.history.push(path, {
data: {...this.data, ...{pageName: 'first'}}
})
}
}
class SecondPage extends Component{
constructor(props){
super(props);
this.data = this.props.history.location.state.data;
}
render(){
return (
<>
<ul>
<li onClick={() => this.navigateTo("/")}>Init</li>
<li onClick={() => this.navigateTo("/first")}>First</li>
<li onClick={() => this.navigateTo("/second")}>Second</li>
<li onClick={() => this.navigateTo("/third")}>Third</li>
</ul>
<div>second page</div>
</>
)
}
navigateTo(path){
this.props.history.push(path, {
data: {...this.data, ...{name: 'deducedValue'}}
})
}
}
class ThirdPage extends Component{
constructor(props){
super(props);
this.data = this.props.history.location.state.data;
}
render(){
return (
<>
<ul>
<li onClick={() => this.navigateTo("/")}>Init</li>
<li onClick={() => this.navigateTo("/first")}>First</li>
<li onClick={() => this.navigateTo("/second")}>Second</li>
<li onClick={() => this.navigateTo("/third")}>Third</li>
</ul>
<div>third page</div>
</>
)
}
navigateTo(path){
this.props.history.push(path, {
data: this.data
})
}
}
class App extends Component {
constructor() {
super();
this.state = {
name: 'React'
};
}
render() {
return (
<div>
<BrowserRouter>
<Switch>
<Route path="/one" render={() => <MemoryComp configFor="Dave"></MemoryComp>}></Route>
<Route path="/two" render={() => <MemoryComp configFor="Mike"></MemoryComp>}></Route>
</Switch>
</BrowserRouter>
</div>
);
}
}
render(<App />, document.getElementById('root'));
最佳答案
一开始我以为Switch
有问题结合 MemoryRouter
,但经过一些调试后,我意识到它实际上是完全独立的。
您遇到的问题是您的基本内存路由需要是 exact
,否则所有其他路由将匹配该路由,并且将返回第一个 ('/')。只需添加 exact
到您的基本路线。
<MemoryRouter>
<Switch>
<Route exact path="/" render={(props) => <InitPage configFor={this.props.configFor} history={props.history}></InitPage>}></Route>
<Route path="/first" component={FirstPage}></Route>
<Route path="/second" component={SecondPage}></Route>
<Route path="/third" component={ThirdPage}></Route>
</Switch>
</MemoryRouter>
/first
需要准确才能使其正常工作:
<Route exact path="/first" component={FirstPage}></Route>
<Route path="/first/nested-1" component={SecondPage}></Route>
<Route path="/first/nested-2" component={ThirdPage}></Route>
关于reactjs - 在 BrowserRouter 中使用 MemoryRouter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60716732/
我想在我的 React 应用程序中使用 BrowserRouter。我已将我最顶层的组件嵌套在 BrowserRouter 标签中,如图所示: import React from 'react'; i
我读了这个声明: The BrowserRouter should be used when you have a server that will handle dynamic requests (
我想使用 basename 来分隔组件。我也有全局 url,所以我最终使用了 3 个 BrowserRouter。这会导致显示多个内容。如果我去/fruit/search,它会同时显示 Homepag
我是一个新手,无法使用react。我正在关注教程React Tutorial创建注册表单。但这样就已经过时了。我试图通过使用浏览器重定向单击链接来重定向到注册、登录和主页。本教程定义的路线如 cons
我目前在我的 app.js 文件中有这个: 在我的 CompOne 中,我想以编程方式导航到 CompTwo。我知道我可以使用 wind
我正在尝试使用 React Idle Timer 在 15 分钟后转到锁定屏幕。 我遇到的问题是重定向页面。我正在使用带有反应的 Electron 和 react BrowserRouter。因此我不
我正在构建一个 Netflix 克隆应用程序,并且正在使用 react-router-dom v5在不同页面之间切换。但是,当我单击 Link标记 Navbar.jsx ,URL 会发生变化,但相应的
在我的项目中,我必须在不更改 url 的情况下从一个组件导航到另一个组件。为此,我使用了 MemoryRouter这按预期工作。但现在同样的想法应该适用于不同的路线,即 /one和 /two .例如,
我正在尝试使用 npm run build 生成的静态index.html 文件以及react-router。 tl;dr 是;我不需要客户端服务器,我希望通过打开位于构建文件夹中的 index.ht
尝试使用 React,我决定测试 typescript 。 代码: import { BrowserRouter } from 'react-router-dom' import history f
我使用的是 React 路由在线类(class)中的以下代码: import { Router, Route, browserHistory } from 'react-router'; ReactD
我正在使用 React-router 版本 5.5.1,并尝试在我的 index.js 文件中使用它: ./src/index.js 14:8-21 'react-router' does not c
这是我第一次尝试 React。我使用 create-react-app 创建了一个项目,然后对于路由,我使用 React Router V4 for web react-router-dom . 这是
我正在从 React Router v5 升级到 v6。当我运行应用程序时,url 中没有基本名称,也没有加载任何内容,当我将/config2 添加到 url 时,一切都会显示出来。我在使用 v5 B
使用 时出现以下错误react-router-dom 版本 6 : Uncaught Error: Invalid hook call. Hooks can only be called inside
我试图了解 react-router-dom (v5) 包的 BrowserRouter 和 Router 之间的区别以及它们之间的区别下面是我的例子。 文档说: BrowserRouter A th
我是编程新手,如果我阅读官方文档,这会让我有点难以理解。 我正在阅读有关 React Router 4 from here 的内容 在这篇文章中,作者谈论的是 和 这就是他提到的: HashRoute
使用HashRouter,路由在所有情况下都能正常工作,但是当使用BrowserRouter时,刷新页面时会显示错误。 这是我封装在 HashRouter 和 BrowserRouter 下的路由代码
这是我的代码: import React from "react"; import ReactDOM from "react-dom"; import Navbar from "./component
这是我的代码: import React from "react"; import ReactDOM from "react-dom"; import Navbar from "./component
我是一名优秀的程序员,十分优秀!