Reactjs вызывает другой компонент при нажатии кнопки

#reactjs #button #onclick #state #history.js

#reactjs #кнопка #onclick #состояние #history.js

Вопрос:

В настоящее время я работаю над простой системой, в которой после нажатия кнопки открывается другая веб-страница. Тем не менее, я стремлюсь отобразить компонент после нажатия кнопки. Таким образом, я инициализировал состояние с логическим значением false . Кроме того, после нажатия кнопки состояние должно быть установлено в true, что должно включить отображение компонента ApartmentBooking01. При запуске кода появляется новая веб-страница из-за объекта history.push. Однако он не отображает мой требуемый компонент ApartmentBooking01. Может кто-нибудь объяснить мне, что я делаю не так?

 class ApartmentInformation01 extends React.Component {

  constructor(props){
    super(props);
    this.state = {
      showBookingInformation: false,
      apartmentInformation: [{
        apartmentNumber: [],
        availableBeds: [],
        pricePerNight: []
      }]
    };
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(event) {
    this.props.history.push("api/apartments/apartmentbooking01");
    this.setState({
      showBookingInformation: !this.state.showBookingInformation
    });
    
  }

  getApartmentBookingComponent(){
    if(this.state.showBookingInformation){
      return <ApartmentBooking01/>
    }else {
      return null;
      
    }
  }

  componentDidMount() {
    axios.get(`http://localhost:8080/api/apartment/`)
      .then(res => {
        const apartmentInformation = res.data;
        this.setState({ apartmentInformation });

      })
  }


  render() {
    const { apartmentInformation } = this.state;

    return (

      <div className='apartmentInformation-container'>

        <ul>
          {
            apartmentInformation.filter(apartmentInfo => apartmentInfo.apartmentNumber == 1)
              .map(filteredApartment => (
                <div className='apartmentInformation-items'>
                  <h2 className='apartmentssection-01-price'>Price per Night</h2>
                  <p className='apartmentInformation-items-pricePerNight'>€{filteredApartment.pricePerNight},-  </p>
                  <h2 className='apartmentssection-01-beds'>Available Beds</h2>
                  <p className='apartmentInformation-items-availableBeds'>{filteredApartment.availableBeds} Beds</p>
                </div>

              ))
          }
        </ul>
   
        <button variant="btn-success" onClick={this.handleClick}>More information</button>
        {this.getApartmentBookingComponent}
   
      </div>




    )

  }


}

export default withRouter (ApartmentInformation01)
 

Ответ №1:

Попробуйте добавить event.preventDefault() handleClick функцию at. Это должно быть в первой строке.

также вы должны добавить ключи для вашего метода сопоставления:

 <div className='apartmentInformation-items' key={appId}>
 

Комментарии:

1. Я вижу, но метод preventDefault() предназначен для отмены события, если оно отменяется, верно? Я попробовал, но, к сожалению, это не решило мою проблему… может быть, у вас есть какие-нибудь другие советы?