React Context provides a way to pass data through the component tree without prop drilling. A Provider stores a value, and any descendant that calls useContext subscribes to that value and re-renders whenever it changes.
Context solves the problem of passing data through many layers of components that do not use it themselves. Instead of threading props through every intermediate component, you wrap a subtree in a Provider and let any descendant read the value directly with useContext.
Internally, createContext creates a context object that holds a default value. When a Provider mounts, it stores a new value on the context. When useContext is called, React walks up the fiber tree from the consumer to find the nearest Provider for that context and returns its current value.
Context does not have a built-in selector mechanism. When a Provider's value changes (determined by Object.is comparison), React re-renders every component that called useContext for that specific context, regardless of which part of the value each consumer actually uses.
Interview framing: define Context Propagation in one sentence, then explain one concrete runtime behavior and one common pitfall with a short code example.