RFC: Server Context for React Server Components #33088
Open
+218
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This RFC proposes reintroducing Server Context for React Server Components to provide a way to share values across components (including async components) without prop drilling.
Motivation
Server Components introduce async rendering patterns which seems to require a specialized context solution. The absence of such a mechanism causes several problems:
This is especially problematic for component library authors who:
Proposed Solution
A set of APIs specifically designed for Server Components:
Implementation
The implementation leverages Node.js's
AsyncLocalStorage
to maintain context across async boundaries:$$typeof
symbol (REACT_SERVER_CONTEXT_TYPE
)AsyncLocalStorage
is already used successfully in React for resource resolution in server rendering, making it a proven solution for this purpose.Key Use Cases
Performance Considerations
AsyncLocalStorage has minimal overhead and is optimized in Node.js:
Drawbacks
Alternatives Considered
Unresolved Questions
References