const ToDo = props => ( <tr> <td> <label>{props.id}</label> </td> <td> <input /> </td> <td> <label> {props.createdAt.toTimeString()} </label> </td> </tr> ); class ToDoList extends React.Component { constructor() { super(); const date = new Date(); const toDoCounter = 1; this.state = { list: [ { id: toDoCounter, createdAt: date, }, ], toDoCounter: toDoCounter, }; } sortByEarliest() { const sortedList = this.state.list.sort( (a, b) => { return ( a.createdAt - b.createdAt ); } ); this.setState({ list: [...sortedList], }); } sortByLatest() { const sortedList = this.state.list.sort( (a, b) => { return ( b.createdAt - a.createdAt ); } ); this.setState({ list: [...sortedList], }); } addToEnd() { const date = new Date(); const nextId = this.state.toDoCounter + 1; const newList = [ ...this.state.list, {id: nextId, createdAt: date}, ]; this.setState({ list: newList, toDoCounter: nextId, }); } addToStart() { const date = new Date(); const nextId = this.state.toDoCounter + 1; const newList = [ {id: nextId, createdAt: date}, ...this.state.list, ]; this.setState({ list: newList, toDoCounter: nextId, }); } render() { return ( <div> <code>key=id</code> <br /> <button onClick={this.addToStart.bind( this )}> Add New to Start </button> <button onClick={this.addToEnd.bind( this )}> Add New to End </button> <button onClick={this.sortByEarliest.bind( this )}> Sort by Earliest </button> <button onClick={this.sortByLatest.bind( this )}> Sort by Latest </button> <table> <tr> <th>ID</th> <th /> <th>created at</th> </tr> {this.state.list.map( (todo, index) => ( <ToDo key={todo.id} {...todo} /> ) )} </table> </div> ); } } ReactDOM.render( <ToDoList />, document.getElementById('root') );