now considering lifecycle methods as first-class callbacks