Notes: March 7, 2018

Code from our virtual meeting during the snow storm. Thanks to all who participated!

Scratch Pad on How to Update State in React

class MyComponent extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            course: {
                name: 'Intro to CS',
                department: 'Computer Science',
                term: '2018 Spring'
            }
        };
    }

    updateCourseName(newName) {
        //this.state.course.name = newName;
        // Copy current course
        const newCourse = Object.assign({}, this.state.course);

        // ES6 syntax
        const newCourse = {...this.state.course};
        newCourse.name = newName;

        this.setState({ course: newCourse });
    }

    render() {
        return (<button onClick={() => {this.updateCourseName()}}></button>);
    }
}

Say Hello App

App.js

import React, { Component } from 'react';
import NameField from './components/NameField';
import Hello from './components/Hello';
import logo from './logo.svg';
import './App.css';

class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      names: []
    };

    this.addName = this.addName.bind(this);
  }

  addName(name) {
    const names = this.state.names.concat(name);
    this.setState({ names: names });
  }

  render() {
    return (
      <div className="App">
        <NameField addName={this.addName} />
        {this.state.names.map((name, index) => {
          return (<Hello key={index} name={name} />);
        })}
      </div>
    );
  }
}

export default App;

components/NameField.js

import React from 'react';

class NameField extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            nameValue: ''
        };

        this.keyUp = this.keyUp.bind(this);
        this.submitName = this.submitName.bind(this);
    }

    keyUp(event) {
        const nameValue = event.target.value;
        this.setState({ nameValue: nameValue });
    }

    submitName() {
        this.props.addName(this.state.nameValue);
    }

    render() {
        return (
            <div>
                <input type="text" onKeyUp={this.keyUp} />
                <button type="submit" onClick={this.submitName}>Submit</button>
            </div>
        );
    }
}

export default NameField;

components/Hello.js

import React from 'react';

class Hello extends React.Component {
    render() {
        return (<div>Hello {this.props.name}</div>);
    }
}

export default Hello;