Simplify component lifecycle and use event system for component events