Although useEffect is enough for most of our needs, we should know about the useLayoutEffect hook—running synchronously, it can be used for things such as animations, measurements, mutations, etc.
Complex state in React involves managing many different state changes in many different components. There’s a library for that! I’ll recommend two, plus tell you what won’t work.