首页 > 解决方案 > 单击按钮时提供新项目

问题描述

我正在尝试使此页面上的按钮打印另一个随机项目。我创建了函数,当我单击按钮时,控制台中会出现一个新对象;但是它不会在页面上打印。

import React from "react";
import './Random.css'

class Random extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      breweries: []
    };
  }

  componentDidMount() {
    fetch("https://api.openbrewerydb.org/breweries")
      .then(response => response.json())
      .then((data) => {
        this.setState({
          breweries: data,
        })
      })
  }

  reloadPage() {
    const brewery = this.state.breweries[Math.floor(Math.random()*this.state.breweries.length)];
    console.log(brewery)
  }

  render() {
    const brewery = this.state.breweries[Math.floor(Math.random()*this.state.breweries.length)];
    console.log(brewery)
    return(
    <div className="main">
      <div className="details">
          <p><b>Name:</b> {brewery && brewery.name}</p>
          <p className="category"><b>Category:</b> {brewery && brewery.brewery_type}</p>
          <p><b>Address:</b> {brewery && brewery && brewery.street}, {brewery && brewery.city},
      {brewery && brewery.state}, {brewery && brewery.postal_code}, {brewery && brewery.country}</p>
          <p><b>Phone Number:</b> {brewery && brewery.phone}</p>
          <p><b>Website:</b> <a href={brewery && brewery.website_url} target="_blank">{brewery && brewery.website_url}</a></p>
      </div>
      <div className="button">
        <button onClick={() => this.reloadPage()}>Get another random item</button>
      </div>
    </div>
    )
  }
}

export default Random;

标签: javascriptreactjs

解决方案


你需要this.setState()

reloadPage() {
    const brewery = this.state.breweries[Math.floor(Math.random()*this.state.breweries.length)];
    console.log(brewery)
this.setState({breweries:brewery})
  }

但在渲染中你会再次随机化

所以更好

componentDidMount() {
    fetch("https://api.openbrewerydb.org/breweries")
      .then(response => response.json())
      .then((data) => {
        this.reloadPage()
      })
  }

  reloadPage() {
    const brewery = this.state.breweries[Math.floor(Math.random()*this.state.breweries.length)];
 this.setState({breweries:brewery})
  }

  render() {
    const brewery = this.state.breweries.length > 1 && this.state.breweries[0];

推荐阅读