0

I built something like this:

import axios from 'axios';
import React, { Component } from 'react';
class GuessEngine extends Component {
  constructor(props) {
    super(props);

    this.state = {
      number: null,
      result: null,
    };
  }

  componentDidMount() {
    const firstGuess = 5000;
    axios
      .post('http://localhost:3001/number', {
        isNumber: firstGuess,
      })
      .then(response => {
        const { resultCode } = response.data;
        this.setState({ number: firstGuess });
        this.setState({ result: resultCode });
      })
      .catch(error => console.log(error));
  }

  componentDidUpdate() {
    if (this.state.result !== 'success') {
      if (this.state.result === 'lower') {
        const newNumber = this.state.number - 1;
        axios
          .post('http://localhost:3001/number', {
            isNumber: newNumber,
          })
          .then(response => {
            const { resultCode } = response.data;
            this.setState({ result: resultCode, number: newNumber });
          });
      } else if (this.state.result === 'higher') {
        const newNumber = this.state.number + 1;
        axios
          .post('http://localhost:3001/number', {
            isNumber: newNumber,
          })
          .then(response => {
            const { resultCode } = response.data;
            this.setState({ result: resultCode, number: newNumber });
          });
      }
    } else if (this.state.result === 'success') {
      console.log(`Success! The secret number is ${this.state.number}!`);
    } else {
      console.log(`Sorry! Some errors occured!`);
    }
  }

  render() {
    return <div>Test</div>;
  }
}

export default GuessEngine;

My server has generated a secret number and my client app is guessing it. I can console.log each guess and the result (lower/higher) but I wonder how can I store each guess and then show to the user all of my app guessing history.

Should I write each guess to this.state.guesses object and then in render() method should I map over it to show it to the user, or is it a better way?

MountainConqueror
  • 592
  • 3
  • 7
  • 27

1 Answers1

1

Adding entries to an guesses array on state is the right way. You should do it copying the array before using setState. Check the spread operator syntax on this answer:

this.setState({guesses: [...this.state.guesses, newGuess]});

And use something like this to render:

{this.state.guesses.map((guess, index) => <div key={index}>{guess}</div>)}
Murilo Cruz
  • 2,387
  • 1
  • 17
  • 19