Start here. This is the direct spoken answer to practice first.
Overview
Context removes prop plumbing, but it is also a subscription boundary whose value and scope influence update cost.
A component that reads a context rerenders when the closest provider receives a different value by Object.is. memo does not block a fresh context value. I keep providers close to the consumers that need them, avoid recreating object and function values unnecessarily, and split unrelated domains so changing a clock or draft does not refresh consumers that only need identity or theme.