【发布时间】:2020-10-26 00:14:07
【问题描述】:
我对反应有点陌生,我遇到了路由器问题。 当我直接在浏览器上输入 URL 时,路由工作,但是当我单击链接时,浏览器上的 URL 会发生变化(例如 http://localhost:8080/contactus),但内容没有得到更新(但是如果我进行刷新,它就会更新)。
这是我的 github 仓库: https://github.com/Arefaat18/Project
这是我的 MainComponent.js
import React, { Component } from 'react';
import {TransitionGroup, CSSTransition} from 'react-transition-group';
import {Switch, Route, Redirect,withRouter,BrowserRouter as Router} from 'react-router-dom';
import Header from './HeaderComponent';
import ContactUs from './ContactUsComponent';
import AboutUs from './AboutUsComponent';
import Home from './HomeComponent.js';
import {connect} from 'react-redux';
class Main extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<Router>
<Header />
<TransitionGroup>
<CSSTransition classNames="page" timeout={300}>
<Switch>
<Route path="/home" component={Home} />
<Route exact path = "/contactus" component ={ContactUs} />
<Route exact path = "/aboutus" component ={AboutUs} />
<Redirect to="/home" />
</Switch>
</CSSTransition>
</TransitionGroup>
</Router>
</div>
);
}
}
export default withRouter(Main);
这是我的 App.js 文件
import React, { Component } from 'react';
import Main from './components/MainComponent';
import './App.css';
import {BrowserRouter} from 'react-router-dom';
import {Provider} from 'react-redux';
import {ConfigureStore} from './components/configureStore';
const store = ConfigureStore();
class App extends Component {
render() {
return (
<Provider store={store}>
<BrowserRouter>
<div className="App">
<Main />
</div>
</BrowserRouter>
</Provider>
);
}
}
export default App;
这里是相关的依赖项
"react": "^17.0.1",
"react-bootstrap": "^1.4.0",
"react-dom": "^17.0.1",
"react-redux": "^7.2.1",
"react-redux-form": "^1.16.14",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.4",
这里是我的 ContactUsComponent,其他的组件都是一样的,只是文字不同
import React, { Component } from 'react';
class ContactUs extends Component {
render(){
console.log("RENDER");
return (
<div>
<h1> Contact Us</h1>
</div>
);
}
}
export default ContactUs;
提前致谢。
【问题讨论】:
-
您的路由包含在 2 个路由器中,一个在应用程序文件中,另一个在组件文件中,您只需要 1 个。此外,您只需将实际应用程序作为路由的组件值,即
component={Home},你不需要那个内联渲染。你已经用withRouter包裹了组件一,如果你在渲染函数中console.log,当你在前端改变路由时它会重新渲染吗? -
@Jayce444 我尝试删除 MainComponent.js 中的路由器包装器,但结果仍然相同。如果我离开它并删除 App.js 中的包装器,则会出现错误“错误:不变失败:您不应在
之外使用 ”..我按照您的建议放置了 console.log它仅在我刷新页面时打印,而不是在我单击选项卡时打印 -
这个问题是否仅与“/contactus”路径有关?所有路径?您是否实现了任何类型的页面组件记忆?你能提供你的组件代码吗?是否可以提供一组精确的复制步骤,正是您正在做什么来查看问题?您能否创建一个重现此问题的 running 代码框?除了您可以简单地将组件传递给
component道具这一事实之外,我在这里看不到任何明显的错误。 -
@DrewReese 没有问题出在所有组件上。我还没有实现页面组件记忆,我真的不知道。我编辑了我的代码以包含我的组件。我还对其进行了编辑以直接传递组件而无需内联样式。
-
我尝试将尽可能多的代码复制到正在运行的codesandbox 中,它似乎可以正常工作。您可以尝试创建一个您自己的 running 代码框来重现您的问题吗?如果您的项目托管在 github 中,您可以直接导入到代码沙箱中。
标签: javascript reactjs react-router react-router-dom