一点背景。我正在使用Firebase身份验证(GitHub,Twitter和Facebook),当用户通过身份验证时,应用应该从Updater
组件重定向到SocialButtonList
组件。
现在我尝试在用户通过身份验证时使用重定向to: string
,但由于某种原因无效,可能是我误解了文档。
我的顶级容器
const App = () => {
return (
<Router>
<div>
<Switch>
<Route path='/updater' component={Updater} />
<Route exact path='/' component={Login} />
<Route component={NoMatch}/>
</Switch>
</div>
</Router>
);
}
Login.js
const Home = () => {
return (
<Content align='center'>
...
<SocialButtonList size={SOCIAL_BUTTON_SIZE_BIG} />
...
</Content>
);
}
SocialButtonList.js
此组件处理身份验证逻辑,在进行身份验证后,我致电authHandler
,从此处我尝试重定向到“更新程序”。成分
authHandler = authData => {
if (authData) {
<Redirect to='/updater' />
console.log('AUTHENTICATED');
} else {
console.info('User is signed out!');
}
}
在控制台中,我可以看到AUTHENTICATED
消息,但该应用不会重定向。如何正确地重定向到Updater
组件?
更新我找到了一种使用withRouter
重定向的方法。请参阅下面答案部分中的答案。
答案 0 :(得分:0)
好吧,我使用withRouter
代替Redirect
import { withRouter } from 'react-router-dom';
...
authHandler = authData => {
if (authData) {
//<Redirect to={Updater} />
this.props.history.push('/updater');
console.log('AUTHENTICATED');
} else {
console.info('User is signed out!');
}
}
...
export default withRouter(SocialButtonList);
这已成功重定向到Updater
组件。
现在我想知道,有没有办法让Redirect
工作?