Я делаю маршрутизацию по событию нажатия кнопки
redirect(){
return <Redirect to='/chat' />;
}
Это не работает.
моя домашняя страница - базовый компонент:
import React, { Fragment } from 'react';
render() {
const { value } = this.state;
return (
<Router>
<div>
<Switch>
<Route exact = {true} path = "/" component = {Home} />
<Route path = "/notify" component = {Notify} />
<Route path = "/chat" component = {Chat}/>
</Switch>
</div>
<footer className = "foot">
<BottomNavigation className = "navbar navbar-default navbar-static-bottom navbar-fixed-bottom" value = {value} onChange = {this.handleChangeEvent} className = {this.props.root}>
<div className = "navi">
<Link to = "/"> <BottomNavigationAction label = "Home" value = "Home" icon = {<HomeIcon />} /></Link>
</div>
<div className = "navi">
<Link to = "/notify"><BottomNavigationAction label = "Notification" value = "Notification" icon = {<NotifyIcon />} /></Link>
</div>
<div className = "navi">
<Link to = "/chat"> <BottomNavigationAction label = "Listen" value = "Listen" icon = {<LocationOnIcon />} /></Link>
</div>
</BottomNavigation>
</footer>
Из моего дочернего компонента мне нужно перенаправить на другой компонент, вот мой дочерний компонент:
<IconButton className = {this.props.iconButton} aria-label = "Search" onClick = {this.redirect}>
<SearchIcon />
</IconButton>
redirect(){
return <Redirect to='/chat' />;
}
Так что, но я тоже не получаю никаких ошибок консоли.
<Redirect />
является компонентом. Итак, вы должны использовать это так.
class App extends React.Component{
state = {
isRedirect: false,
}
redirect = () => {
this.setState({ isRedirect: true });
}
render() {
return (
<>
<button onclick = {this.redirect}> Redirect</button>
{this.state.isRedirect ? <Redirect to = "/" /> : null }
</>
)
}
}
ИЛИ
Вы можете использовать история API
но вы должны добавить withRouter()
class App extends React.Component{
render(){
return(
<>
<button onClick = {()=>{this.props.history.push('/')}}>Redirect</button>
</>
)
}
}
export default withRouter(App);
Я выбрал метод API истории, он работает
@SridharPaiya Я согласен, history API
более рекомендуется
это потому, что
Redirect
— это элемент пользовательского интерфейса, вы должны отобразить его, а onClick — это обработчик событий, он ничего не отобразит, он просто выполнит тело функции обработчика. Чтобы решить вашу проблему, используйтеthis.props.history.push('/chat')