setState(state) {
    this.state = assign({}, this.state, state);

    if (!RenderDebounce.has(this)) {
      RenderDebounce.set(this, new Promise(resolve => setTimeout(() => {
        RenderDebounce.delete(this);

        this.componentWillReceiveProps(this.props, this.state);

        if (this.shouldComponentUpdate(this.props, this.state)) {
          resolve(this[$$render]());
        }
        else {
          resolve(null);
        }
      })));
    }

    return RenderDebounce.get(this);
  }
Changes the component state synchronously by shallow merging the incoming
state into the previous state. Rendering will then be scheduled to the
next reachable tick. If this is called multiple times on a single tick
all that will happen is the state will be updated by no rendering will
occur until the next tick.

You can await this method to know when rendering has completed.

@param {State} state