DEV Community

Randy Rivera
Randy Rivera

Posted on • Edited on

React: Use Advanced JavaScript in React Render Method

  • Welcome everyone and a great morning to you all. Today we will continue the freecodecamp lessons with this. In previous posts, we've gone over how to use JavaScript code into JSX code using curly braces, { }, for accessing props, passing props, accessing state, inserting comments into your code and as well as styling your components.
  • You can also write JavaScript directly in your render methods, before the return statement, without inserting it inside of curly braces. This is because it is not yet within the JSX code.
  • In the code that I'm about to show you is a render method which has an array that contains 20 phrases to represent the answer. The button click event is bound to the ask method, so each time the button is clicked a random number will be generated and stored as the randomIndex in state. We have to change line 52, and reassign the answer const so ou code randomly accesses a different index of the possibleAnswers array each time it updates.
  • Code:
const inputStyle = {
  width: 235,
  margin: 5
};

class MagicEightBall extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      userInput: '',
      randomIndex: ''
    };
    this.ask = this.ask.bind(this);
    this.handleChange = this.handleChange.bind(this);
  }
  ask() {
    if (this.state.userInput) {
      this.setState({
        randomIndex: Math.floor(Math.random() * 20),
        userInput: ''
      });
    }
  }
  handleChange(event) {
    this.setState({
      userInput: event.target.value
    });
  }
  render() {
    const possibleAnswers = [
      'It is certain',
      'It is decidedly so',
      'Without a doubt',
      'Yes, definitely',
      'You may rely on it',
      'As I see it, yes',
      'Outlook good',
      'Yes',
      'Signs point to yes',
      'Reply hazy try again',
      'Ask again later',
      'Better not tell you now',
      'Cannot predict now',
      'Concentrate and ask again',
      "Don't count on it",
      'My reply is no',
      'My sources say no',
      'Most likely',
      'Outlook not so good',
      'Very doubtful'
    ];
    const answer =  // Change this line
    return (
      <div>
        <input
          type='text'
          value={this.state.userInput}
          onChange={this.handleChange}
          style={inputStyle}
        />
        <br />
        <button onClick={this.ask}>Ask the Magic Eight Ball!</button>
        <br />
        <h3>Answer:</h3>
        <p>
          {/* Change code below this line */}


          {/* Change code above this line */}
        </p>
      </div>
    );
  }
}
Enter fullscreen mode Exit fullscreen mode
  • Answer:
    const answer = possibleAnswers[this.state.randomIndex];
    return (
      <div>
        <input
          type='text'
          value={this.state.userInput}
          onChange={this.handleChange}
          style={inputStyle}
        />
        <br />
        <button onClick={this.ask}>Ask the Magic Eight Ball!</button>
        <br />
        <h3>Answer:</h3>
        <p>
          {answer}
        </p>
      </div>
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

Larson, Q., 2019. Frontend Development Libraries. [online] Freecodecamp.org. Available at: https://www.freecodecamp.org/learn/front-end-development-libraries/react

Top comments (1)

Collapse
 
haaxor1689 profile image
Info Comment hidden by post author - thread only accessible via permalink
Maroš Beťko

Why would you repost 2 year old article here. It's pretty outdated.

Some comments have been hidden by the post's author - find out more