#reactjs #button #react-navigation
#reactjs #кнопка #реакция-навигация
Вопрос:
В верхней части страницы react у меня есть панель, в которой отображается номер заказа, и я бы также хотел, чтобы она содержала кнопку «Назад».
У меня есть следующий код, но когда я перехожу на эту страницу, он мигает и автоматически возвращается на предыдущую страницу без нажатия кнопки. Может кто-нибудь, пожалуйста, скажите мне, что я сделал не так?
import React from "react";
import { Link} from "react-router-dom";
class Messages extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [],
isLoading: false,
};
}
componentDidMount() {
this.setState({ isLoading: true });
const proxyurl = "https://cors-anywhere.herokuapp.com/";
const url =
"myURL"
this.props.location.state.rollNumber;
fetch(proxyurl url)
.then((res) => res.json())
.then((data) => this.setState({ data: data, isLoading: false }));
}
render() {
const { data, isLoading } = this.state;
if (isLoading) {
return <p>Loading ...</p>;
}
if (data.length === 0) {
return <p> no data found</p>;
}
return (
<div>
<div className="detailsBanner">
<div className="orderID"> <strong>Order number: {this.props.location.state.orderId}</strong></div>
<div className="returnToApps"><button onClick={this.props.history.goBack()}>return to all orders</button></div>
</div>
Комментарии:
1. Попробуйте это —
onClick={this.props.history.goBack}
Ответ №1:
Вы не должны выполнять функцию внутри onclick
<button onClick={this.props.history.goBack}>return to all orders</button>
Ответ №2:
Вместо этого используйте onClick={this.props.history.GoBack} вы можете использовать приведенный ниже код:
<div className="returnToApps">
<Link to="/"}>return to all orders</Link>
</div>
Ответ №3:
Потому что, поскольку вы написали код таким образом
<button onClick={this.props.history.goBack()}
когда компонент смонтирован, функция GoBack() будет выполняться напрямую
это похоже на то, что вы помещаете
{state.someArray.map(item => <span>Name :{item.name}</span>)}
will render =>
Name: myName0
Name: myName1
Name: myName3
в jsx при загрузке страницы вы увидите имя, в x раз превышающее его значения. Он выполняется напрямую.
Попробуйте написать так
<button onClick={() => this.props.history.goBack()}
Или то, что написал UKS.
Таким образом, функция не будет запускаться непосредственно при монтировании компонента и будет запускаться только при нажатии на нее. Дайте мне знать, если это поможет