Keep the block's data when adding or removing

Instead of setting new state directly on block's change, let the
block call `props.toData/1` so that the parent can update the main
state, triggering the parent's render, which re-renders the block
again.

This leaves a problem that the block will loose focus on every
internal change. Need to fix it.