A. To pass data to deeply nested components without explicit prop drilling
B. To manage the global state of a React application
C. To enable communication between sibling components
D. All of the above