Not sure we need to hold state here. I think it would be nice to make it as dumb as possible, just updating the DOM when `setValue` is called.