Cache event handlers

event handlers function that get injected into child component are now
cached, this way ‘shallowEqual’ is not affected by those functions, and
we do not re-render component when it’s not necessary