Show More

by Allie Yu

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.10.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.10.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>

Babel + JSX

class ShowSomeItems extends React.Component {
  constructor() {
    super()
    this.state = {
      cars: [
        { "name": "Audi", "country": "Germany" },
        { "name": "BMW", "country": "Germany" },
        { "name": "Chevrolet", "country": "USA" },
        { "name": "Citroen", "country": "France" },
        { "name": "Hyundai", "country": "South Korea" },
        { "name": "Mercedes-Benz", "country": "Germany" },
        { "name": "Renault", "country": "France" },
        { "name": "Seat", "country": "Spain" },
        { "name": "Dodge", "country": "USA" },
        { "name": "BMW", "country": "Germany" },
        { "name": "Tesla", "country": "USA" },
        { "name": "Volkswagen", "country": "Germany" },
        { "name": "Hyundai", "country": "South Korea" },
        { "name": "Jaguar", "country": "United Kingdom" },
        { "name": "GMC", "country": "USA" },
        { "name": "Bentley", "country": "United Kingdom" },
      ],
      numberOfitemsShown: 5,
    }
  }


  showMore = () => {
    if (this.state.numberOfitemsShown + 5 <= this.state.cars.length) {
      this.setState(state => ({ numberOfitemsShown: state.numberOfitemsShown + 3 }));
    } else {
      this.setState({ numberOfitemsShown: this.state.cars.length })
    }
  }

  render() {

    const itemsToShow = this.state.cars
      .slice(0, this.state.numberOfitemsShown)
      .map(car => <li key={car.name}>{car.name}</li>);

    return (
      <div>
        <ul>
          {itemsToShow.length ? itemsToShow : "Loading..."}
        </ul>
        <button onClick={this.showMore}>
          show more
        </button>
      </div>
    );
  }
}

ReactDOM.render(
    <ShowSomeItems/>,
    document.getElementById('root'));