кнопка реагирования onClick перенаправить страницу
Я работаю над веб-приложением, используя React и bootstrap. Когда дело доходит до применения кнопки onClick, мне нелегко перевести мою страницу на другую. если после href я не могу перейти на другую страницу.
Итак, пожалуйста, скажите мне, есть ли необходимость использовать интерактивную навигацию или другую для навигации по странице с помощью кнопки onClick?
import React, { Component } from 'react';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink } from 'reactstrap';
class LoginLayout extends Component {
render() {
return (
<div className="app flex-row align-items-center">
<Container>
...
<Row>
<Col xs="6">
<Button color="primary" className="px-4">
Login
</Button>
</Col>
<Col xs="6" className="text-right">
<Button color="link" className="px-0">Forgot password?</Button>
</Col>
</Row>
...
</Container>
</div>
);
}
}
Ответы
Ответ 1
используйте React Router v4:
import { withRouter } from 'react-router-dom';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink } from 'reactstrap';
class LoginLayout extends Component {
constuctor() {
this.routeChange = this.routeChange.bind(this);
}
routeChange() {
let path = 'newPath';
this.props.history.push(path);
}
render() {
return (
<div className="app flex-row align-items-center">
<Container>
...
<Row>
<Col xs="6">
<Button color="primary" className="px-4"
onClick={this.routeChange}
>
Login
</Button>
</Col>
<Col xs="6" className="text-right">
<Button color="link" className="px-0">Forgot password?</Button>
</Col>
</Row>
...
</Container>
</div>
);
}
}
export default withRouter(LoginLayout);
Ответ 2
Простой обработчик кликов на кнопке, и установка window.location.hash
будет делать трюк, предполагая, что ваш пункт назначения также находится в приложении.
Вы можете прослушать событие hashchange
в window
, проанализировать URL-адрес, который вы получаете, вызвать this.setState()
, и у вас есть свой простой маршрутизатор, без библиотеки.
class LoginLayout extends Component {
constuctor() {
this.handlePageChange = this.handlePageChange.bind(this);
this.handleRouteChange = this.handleRouteChange.bind(this);
this.state = { page_number: 0 }
}
handlePageChange() {
window.location.hash = "#/my/target/url";
}
handleRouteChange(event) {
const destination = event.newURL;
// check the URL string, or whatever other condition, to determine
// how to set internal state.
if (some_condition) {
this.setState({ page_number: 1 });
}
}
componentDidMount() {
window.addEventListener('hashchange', this.handleRouteChange, false);
}
render() {
// @TODO: check this.state.page_number and render the correct page.
return (
<div className="app flex-row align-items-center">
<Container>
...
<Row>
<Col xs="6">
<Button
color="primary"
className="px-4"
onClick={this.handlePageChange}
>
Login
</Button>
</Col>
<Col xs="6" className="text-right">
<Button color="link" className="px-0">Forgot password </Button>
</Col>
</Row>
...
</Container>
</div>
);
}
}
Ответ 3
Я пытался найти способ с Redirect, но не смог. Перенаправление onClick проще, чем мы думаем. Просто поместите следующий базовый JavaScript в функцию onClick:
window.location.href="pagelink"
Ответ 4
Не используйте кнопку в качестве ссылки. Вместо этого используйте ссылку в виде кнопки.
<Link to="/signup" className="btn btn-primary">Sign up</Link>