【发布时间】:2021-02-14 02:37:48
【问题描述】:
我在我的项目中使用react-router,并在componentDidMount() 中使用this.props.history.push(),如果用户没有登录,则将他重定向到Login 组件。
这是我在 App.js 中的代码:
class App extends React.Component{
constructor(props){
super(props);
}
componentDidMount(){
firebase.auth().onAuthStateChanged((user)=>{
if(user){
this.props.dispatch(login(user.email));
}
else{
this.props.history.push('/login');
}
})
}
render(){
//console.log(this.props.isLoggedIn);
return (<div className="App">
<Switch>
<Route path="/" component={()=><Homepage userName={this.props.username} logout={this.logout}/>} />
<Route path="/login" component={Login} />
</Switch>
</div>);}
}
export default withRouter(connect(mapStateToProps)(App));
下面是我的 index.js 代码:
import React from 'react';
import ReactDOM from 'react-dom';
import 'bootstrap/dist/css/bootstrap.min.css';
import './index.css';
const store= createStore(combineReducers({userState: userState}),applyMiddleware(logger));
ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
,
document.getElementById('root')
);
请注意,我删除了一些与此问题的上下文无关的不必要的功能和导入。
现在让我们来看看我到目前为止所做的尝试:
- 使用
Router而不是BrowserRouter并将历史对象传递给它。 - 尝试删除
switch,但也没有用。
我还搜索了解决此问题的其他问题,但不幸的是,没有一个对我有用。
请帮我看看我的代码是否有问题。
谢谢!!
编辑:
看来我今天过得很糟糕,即使 Redirect 对我也不起作用!
我非常努力,但我不明白为什么即使更改 URL 也没有呈现登录组件。
【问题讨论】:
-
您没有使用 Switch 路由的确切路径。开关将首先击中您的
/路径。尝试将该行与/login行交换 -
你使用的是 react-router 还是 react-router-dom?
-
@Varun 我正在使用带有 BrowserRouter 的 react-router-dom
-
没有什么对我有用!即使我使用了 Reduret,也无法渲染 Login 组件。
-
@JontyTyagi 我已经模仿了您的代码并使用 Switch 路由的确切路径运行它,它按预期工作。这是链接stackblitz.com/edit/react-ep89cj?file=src/App.js
标签: reactjs react-router