-
Notifications
You must be signed in to change notification settings - Fork 1k
Remove defaultProps usages for functional components #7224
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove defaultProps usages for functional components #7224
Conversation
@britt6612 I've added fallbacks to default theme to all the remaining places I saw that might be needed. Tests on both my and your branch passed. |
…b@users.noreply.github.com> On behalf of Basith <134603758+abdulbasithqb@users.noreply.github.com>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 2a4e9ac Signed-off-by: Max Shepel <max@undeletable.name>
…rchibeque@Brittanys-MBP-2.home> On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a954793 On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: f492adb On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 3fd3a11 Signed-off-by: Max Shepel <max@undeletable.name>
…ben@users.noreply.github.com> On behalf of Jessica Filben <54560994+jcfilben@users.noreply.github.com>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 60d5ece Signed-off-by: Max Shepel <max@undeletable.name>
I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a1a5a03 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a092b71 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: fa50a41 Signed-off-by: Max Shepel <max@undeletable.name>
@undeletable so yes what I did was make that new PR which will get merged into Thank you for adding this for the rest of the components |
@britt6612 I've changed base branch to |
@undeletable thank you! Hoping my PR gets merged early next week! then we can merge yours! |
Signed-off-by: Max Shepel <max@undeletable.name>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); | ||
const [connectionPoints, setConnectionPoints] = useState(); | ||
const svgRef = useForwardedRef(ref); | ||
const defaultConnectionsValue = []; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why was this added?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's added in order to keep parity with defaultProps
approach and avoid potentially redundant rerenders or even rerender loops.
Let's consider a prop with value of object type. Assume it has no value passed and falls back to value from defaultProps
. In this case, the value would be equal between renders (props.prop === defaultProps.prop
), since defaultProps
is static.
If we replace defaultProps
with default function parameters, and the default value of mentioned prop is defined as object literal, this means that on each render its values would be different. On each render component function is called again, so default parameter value is re-evaluated. If component state depends on such prop (e.g., via useEffect
or useMemo
), this would result in infinite rerenders loop.
That's why I've initialized such props with stable links. Actually this approach was already used in some other places of grommet.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you ☝️
@@ -43,7 +43,7 @@ if (process.env.NODE_ENV !== 'production') { | |||
PropTypes.shape({ | |||
value: PropTypes.number, | |||
}), | |||
).isRequired, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
@@ -216,6 +216,7 @@ const areasStyle = (props) => { | |||
const StyledGrid = styled.div | |||
.withConfig(styledComponentsConfig) | |||
.attrs((props) => ({ | |||
...enhancePropsWithTheme(props), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is this one formatted different just trying to understand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because attrs
was already used for passing aria-label
(see the line below). So using attrs(enhancePropsWithTheme)
would result in losing that property.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh gotcha thank you for clarifying
Thank you @undeletable for all your help! we have a few more things to add but this was a big help! |
* Remove grommet wrapper (#7249) * re-trigger token circle ci * add tests for components outside grommet wrapper * add tests for components outside grommet wrapper * add tests for components outside grommet wrapper * Update src/js/components/Calendar/__tests__/Calendar-test.tsx Co-authored-by: Jessica Filben <54560994+jcfilben@users.noreply.github.com> * Update src/js/components/FormField/__tests__/FormField-test.js Co-authored-by: Jessica Filben <54560994+jcfilben@users.noreply.github.com> * Update src/js/components/ThumbsRating/__tests__/ThumbsRating.tsx Co-authored-by: Jessica Filben <54560994+jcfilben@users.noreply.github.com> * remove data friends tests * remove data friends tests * update tests * update tests --------- Co-authored-by: Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home> Co-authored-by: Jessica Filben <54560994+jcfilben@users.noreply.github.com> * Remove defaultProps usages for functional components (#7224) * Move default parameters from defaultProps to function definitions * Fix Bar component * Update snapshots * Remove defaultProps from styled components - first iteration * Fix styledWithTheme HOC to return correct function * Fix prototypes for styledWithTheme * Fix theme * Add TODOs * Fix Menu test * Add TODO * Remove TODO * Define hook for theme context with fallback to default one * Pass default props to styled component * Use attrs from styled-components * Update snapshots * Pass theme along with default props * Fix props * Fix syntax * Fix theme in props * Merge props * Rename function * Fix lint errors * Switch from deepMerge to object copy * Fix snapshots * Try upgrading styled-components * Roll back to previous styled-components version * Roll back lockfile * Only pass theme using attrs * Fix snapshots * Rename method * Add comment. DCO Remediation Commit for Max Shepel <max@undeletable.name> I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: cd9a5b7 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 14838be I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 1766eed I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: b5e5d26 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: f005071 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 9f56eca I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 019d28b I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 45f81b2 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: b1ca758 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: be3a510 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a8ed76e I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: e329a7a I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: ccd1a6c I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 87adfd3 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 164ac90 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 3926bc9 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 1abbf1b I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: bc92022 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 50478dd I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 9e94bce I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 2911f33 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 780ede8 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 74b3e2b I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 58770f0 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 7d584c8 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: b36c664 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: bd1a606 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 86687bf I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 302564b I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 3772235 Signed-off-by: Max Shepel <max@undeletable.name> * Update snapshots * Remove 'only' from test * Remove attrs() usages where it's not required * DCO Remediation Commit for Max Shepel <max@undeletable.name> I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 6cc1019 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 429627c I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 5c80f67 Signed-off-by: Max Shepel <max@undeletable.name> * Fix typo Signed-off-by: Max Shepel <max@undeletable.name> * Add missing attrs() call. Add enhancePropsWithTheme declaration Signed-off-by: Max Shepel <max@undeletable.name> * Fix Menu test Signed-off-by: Max Shepel <max@undeletable.name> * Don't mark values prop of Distribution as required as it has default parameter value Signed-off-by: Max Shepel <max@undeletable.name> * empty commit to tty and trigger chromatic * fix: Storybook - RangeInput/Bounds example (#7244) * fix: Storybook - RangeInput/Bounds example * feedback: use usEeffect for disable buttons * feedback: use usEeffect for disable buttons * fix: lint fix * add tests for components outside grommet wrapper * add tests for components outside grommet wrapper * add tests for components outside grommet wrapper * Add fallback to default theme where it also might be necessary Signed-off-by: Max Shepel <max@undeletable.name> * Revert "add tests for components outside grommet wrapper" This reverts commit 3fd3a11. * Revert "add tests for components outside grommet wrapper" This reverts commit f492adb. * Revert "add tests for components outside grommet wrapper" This reverts commit a954793. * Third-Party DCO Remediation Commit for Basith <134603758+abdulbasithqb@users.noreply.github.com> On behalf of Basith <134603758+abdulbasithqb@users.noreply.github.com>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 2a4e9ac Signed-off-by: Max Shepel <max@undeletable.name> * Third-Party DCO Remediation Commit for Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home> On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a954793 On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: f492adb On behalf of Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 3fd3a11 Signed-off-by: Max Shepel <max@undeletable.name> * Third-Party DCO Remediation Commit for Jessica Filben <54560994+jcfilben@users.noreply.github.com> On behalf of Jessica Filben <54560994+jcfilben@users.noreply.github.com>, I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: 60d5ece Signed-off-by: Max Shepel <max@undeletable.name> * DCO Remediation Commit for Max Shepel <max@undeletable.name> I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a1a5a03 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: a092b71 I, Max Shepel <max@undeletable.name>, hereby add my Signed-off-by to this commit: fa50a41 Signed-off-by: Max Shepel <max@undeletable.name> * Add missing snapshots Signed-off-by: Max Shepel <max@undeletable.name> --------- Signed-off-by: Max Shepel <max@undeletable.name> Co-authored-by: Jessica Filben <54560994+jcfilben@users.noreply.github.com> Co-authored-by: Basith <134603758+abdulbasithqb@users.noreply.github.com> Co-authored-by: Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home> * Remove isRequired from propTypes (#7252) * remove isRequired from propTypes * revert unnecessary removals of isRequired * add isrequired to fromTarget and toTarget and link diagram proptypes to the diagram component * refactor routed components for react 19 compatibility (#7253) * Upgrade react version * rename function to withTheme * incorporate review comments --------- Signed-off-by: Max Shepel <max@undeletable.name> Co-authored-by: Brittany <42451602+britt6612@users.noreply.github.com> Co-authored-by: Brittany Archibeque <brittanyarchibeque@Brittanys-MBP-2.home> Co-authored-by: Max Shepel <undeletable@users.noreply.github.com> Co-authored-by: Basith <134603758+abdulbasithqb@users.noreply.github.com>
What does this PR do?
Starting from React 19,
defaultProps
for functional components is deprecated. Starting from React 18.3, the corresponding error is thrown for a functional component withdefaultProps
defined.Changes in this PR:
defaultProps
for functional components with default function parameters values;attrs
method ofstyled-components
to pass theme to styled components which might be outside of theme context (required per remove defaultProps from Grommet #6741 (comment));defaultProps
for functional components;Where should the reviewer start?
No specific place to start.
What testing has been done on this PR?
How should this be manually tested?
Use React 18.3+ in an app. Check that styles are applied correctly and no errors about
defaultProps
are thrown into console.Do Jest tests follow these best practices?
screen
is used for querying.asFragment()
is used for snapshot testing.Any background context you want to provide?
React 19 upgrade guide
What are the relevant issues?
Closes #6741
Screenshots (if appropriate)
N/A.
Do the grommet docs need to be updated?
Just the internal ones (if any).
Should this PR be mentioned in the release notes?
Yes.
Is this change backwards compatible or is it a breaking change?
Changes are backwards compatible.