Forms in React

handleSubmit = (e) => {
  if(e.keyCode === 13){
    const newNames = [...this.state.names];
    newNames.push(this.state.name);
    this.setState({ names: newNames, name: '' });
  }
}

Controlled Component

onChange = e => {
  this.setState({ inputValue : e.target.value })
}
<input 
  type="text" 
  onChange={this.onChange}
  value={this.state.value} />

Controlled Component

I princip alla inputfält vi skrivit hitills

Värdet och uppdateringen sker via Reacts flöde

Inte direkt via DOMen som vi gjort i VanillaJS

Uncontrolled Component

När du inte har använder det flöde vi använt

React har inte kontroll på elementet, och kan inte fungera "som det ska".

const input= document.getElementById('myInput').value;

refs

Refs kan också användas för detta

Mindre "reactigt", svårare att hantera

Vissa företag har styleguide: "Inga refs någonsin"

Om man verkligen inte pallar state

<input
  ref={node => {this.input = node;}}
  type="text" />

Sparar hela noden i this.input

input

<input type="text" />

<input 
  type="text" 
  value={this.state.value} 
  onChange={this.onChange} />

<input type="checkbox" />

<input 
  type="checkbox" 
  checked={this.state.checked} 
  onChange={this.onChange} />
onChange = e => {
  this.setState({ checked: e.target.checked});
}

<select></select>

<select value={this.state.value} 
        onChange={this.onChange}>
  <option value="Steffe!"> Steffe </option>
  <option value="Inte Steffe!"> Inte Steffe! </option>
</select>

Man behöver inte alltid lyssna på keyCode/key såklart 😬

<form></form>

<form onSubmit={this.onSubmit}>
  <input 
      type="text" 
      name="value" 
      value={this.state.value} 
      onChange={this.onChange}/>
</form>

Observera, formuläret sköter inte inputfältet, formuläret sköter bara vad som händer vid enter/submit

onSubmit = (e) => {
  e.preventDefault();
  console.log(this.state.value); //loggar vadsom
} 

Här måste vi stoppa formuläret från att skickas iväg

Nu: implementera en LoginForm tillsammans

Eftermiddag: Utöka gårdagens kod samt loginformuläret

Ingen genomgång i eftermiddag