4 ways to manage component state