Where to Hold React Component Data: state, store, static, and this
Sam Corcos
79017

Your last example can be improved even further by using arrow functions:

  // actually you don't need this
//constructor(props) {
// super(props)
// this.addOne = this.addOne.bind(this)
//}
  // just use () => {} and it automatically gets bound with this
addOne = () => {
counter += 1
this.forceUpdate()
}