fix: avoid walking ref props in styled mappings#344
Open
emmanuelchucks wants to merge 1 commit into
Open
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Updates runtime type utilities to exclude ref from derived component props when used in style mapping and dot-notation types, avoiding ref being treated as a style-addressable prop.
Changes:
- Import
PropsWithoutReffrom React and apply it toComponentProps<C>inNativeStyleMappingusages. - Update
ComponentPropsDotNotationto usePropsWithoutRef<ComponentProps<C>>.
Comment on lines
89
to
92
| : NativeStyleMapping< | ||
| ResolveDotPath<T, ComponentProps<C>>, | ||
| ComponentProps<C> | ||
| PropsWithoutRef<ComponentProps<C>> | ||
| >; |
Comment on lines
95
to
+96
| ResolveDotPath<T, ComponentProps<C>>, | ||
| ComponentProps<C> | ||
| PropsWithoutRef<ComponentProps<C>> |
Comment on lines
+88
to
+91
| ? NativeStyleMapping<string, PropsWithoutRef<ComponentProps<C>>> | ||
| : NativeStyleMapping< | ||
| ResolveDotPath<T, ComponentProps<C>>, | ||
| ComponentProps<C> | ||
| PropsWithoutRef<ComponentProps<C>> |
| nativeStyleToProp?: NativeStyleMapping< | ||
| ResolveDotPath<T, ComponentProps<C>>, | ||
| ComponentProps<C> | ||
| PropsWithoutRef<ComponentProps<C>> |
|
|
||
| export type ComponentPropsDotNotation<C extends ReactComponent> = DotNotation< | ||
| ComponentProps<C> | ||
| PropsWithoutRef<ComponentProps<C>> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Fixes a TypeScript performance issue where
styled()can hang when wrapping components whose props include complexreftypes, such asreact-strict-domelements.StyledConfigurationcurrently computes dot-notation style targets fromComponentProps<C>. For components likehtml.div, that includesref?: React.Ref<HTMLDivElement>.DotNotationthen recursively walks into DOM element types throughref, which can make TypeScript hang.This changes style-mapping target inference to use
PropsWithoutRef<ComponentProps<C>>, while preservingrefon the returned styled component props.Closes #343.
Reproduction
Minimal repro: https://github.com/emmanuelchucks/react-native-css-styled-rsd-ref-repro
Test plan
Ran locally:
Also verified the
react-strict-domrepro typechecks after the change.