allow chaining polymorphic components #2196
Draft
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.
Changes
This updates the
polymorphic
implementation so that theas
prop can accept an array of components. Each of the components in the array will be rendered sequentially, forming a chain of components that build upon each other.This array implementation is completely hidden from users, since they should not be passing arrays into
as
. Think of it as an internal feature to help to us compose multiple primitives together.This is needed to address a TODO item from #2021 (see thread). We are now able to use
ButtonBase
andListItem
together.(Also related but not fully addressed: #2135 (comment)).
Further thoughts: The
as
prop seems to have fallen out of fashion in the React world. The alternatives areasChild
andrender
props, both of which allow chaining components without any TS issues. However, it is too late to change our component API.Testing
Pending.
Docs
N/A