2

I have a simple react app that lists users from state. The code is as follows :

import React, { Component } from 'react';
import './App.css';

class App extends Component {

  state = {
    users : [
      { name:'Ramu', age:23 },
      { name:'Somu', age:34 },
      { name:'Bheemu', age:45 }
    ]
  };

  addUser = (user, e) => {
    let users = Object.assign([], this.state.users);
    users.push(user)
    this.setState({
      users : users
    })
  }

  render() {
    return (
      <div className="App">
        <ul>
          { 
            this.state.users.map((user, index) => {
              return (<div>              
                { user.name } | {user.age}
                </div>)
            }) 
          }
        </ul>
        <form onSubmit={this.addUser.bind(this, { name:'Sita', age:21 })}>
          <label>
            Name:
            <input type="text"/>
          </label>
          <label>
            Age:
            <input type="text" />
          </label>
          <input type="submit" value="Submit" />
        </form>
      </div>
    );
  }
}

export default App;

On submitting the form the user gets added but immediately page is reloaded and the new user gets removed from the state. Why is the new user getting removed?

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
dhiraka
  • 817
  • 6
  • 13

1 Answers1

2

You need prevent default browser form submit. Add e.preventDefault() inside the addUser method. Default browser form submit reloads that page, so new <App /> component gets created with its initial state and you loose the new data.

Arup Rakshit
  • 116,827
  • 30
  • 260
  • 317