I have been struggling to understand what is going wrong with this simple todo list front end React app, which should interact with an express API.
my React code is:
import React, {Component} from 'react';
class App extends Component {
constructor(){
    super();
    this.state = { 
        todos:[],
        currentItem: ''
    };  
    this.handleChange = this.handleChange.bind(this);
    this.handleADDButton = this.handleADDButton.bind(this);
    this.deleteItem = this.deleteItem.bind(this);
    this.updateTodo = this.updateTodo.bind(this);
}
componentDidMount(){
    fetch('http://ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com:3001/list')
    .then(res => res.json())
    .then((todosList) =>
        {this.setState({'todos': todosList});
        });
}
handleChange(event){
    this.setState({currentItem: event.target.value});
}
handleADDButton(event){
    fetch('http://ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com:3001/post', {
        method: 'POST',
        headers:{'Content-type': 'application/json'},
        body: JSON.stringify({title: this.state.currentItem})
    });
}
deleteItem(x){
    fetch('http://ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com:3001/' + x, {
        method: 'DELETE',
        headers:{'Content-type': 'application/json'}
        })
      }
updateTodo(y){
    fetch('http://ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com:3001/' + y, {
        method: 'PUT',
        headers:{'Content-type': 'application/json'},
        body: JSON.stringify({title: this.state.currentItem})
        })
    }
render() {
    return(
        <div>
         <h1> Todo List </h1> 
          <ul>
        {this.state.todos.map((todo) => <li> {todo.title}
                    <button type="button" onClick={() => this.deleteItem(todo.key)} >x</button> 
        <button type="button" onClick={() => this.updateTodo(todo.key)}>update</button> </li>)}
          </ul>
            <input type="text" value={this.state.currentItem} onChange={this.handleChange} />
            <button type="submit" onClick={this.handleADDButton}>ADD</button>
            </div>
        )
 }
}
export default App
The calls do update the API, and if I manually refresh the page, the React app picks up on the new data coming through from the API. However, when clicking the buttons it doesn't re-render by itself.
Say for example I click the ADD Button. It sends an OPTIONS to which I get back a 200 code, a POST which also comes back with a 200 and only sometimes, a GET with a 200. There is no pattern in when it performs the last GET call and also there is no pattern in when it re-renders following a button click. To obtain the latest data I always have to refresh.
Don't know what to make of this and have been stuck for days.
 
     
    