-
Notifications
You must be signed in to change notification settings - Fork 2.9k
feat(react-utilities): create useAnimationFrame hook #28948
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
feat(react-utilities): create useAnimationFrame hook #28948
Conversation
Perf Analysis (
|
| Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
|---|---|---|---|---|---|
| FluentProviderWithTheme | virtual-rerender-with-unmount | 80 | 76 | 10 | Possible regression |
All results
| Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
|---|---|---|---|---|---|
| Avatar | mount | 598 | 621 | 5000 | |
| Button | mount | 308 | 308 | 5000 | |
| Field | mount | 1126 | 1112 | 5000 | |
| FluentProvider | mount | 688 | 684 | 5000 | |
| FluentProviderWithTheme | mount | 81 | 78 | 10 | |
| FluentProviderWithTheme | virtual-rerender | 71 | 72 | 10 | |
| FluentProviderWithTheme | virtual-rerender-with-unmount | 80 | 76 | 10 | Possible regression |
| InfoButton | mount | 13 | 12 | 5000 | |
| MakeStyles | mount | 871 | 839 | 50000 | |
| Persona | mount | 1721 | 1689 | 5000 | |
| SpinButton | mount | 1379 | 1361 | 5000 |
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 80eac6c:
|
📊 Bundle size reportUnchanged fixtures
|
Asset size changesSize Auditor did not detect a change in bundle size for any component! Baseline commit: 1fdfe8d9ac8f83790d1d49c123e1eab52b7b2fd9 (build) |
🕵 fluentuiv9 No visual regressions between this PR and main |
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.
Small nit about how you can simplify the types, but aide from that all seems to be fine. Would be nice to have an issue to follow up with the TODOs
packages/react-components/react-utilities/src/hooks/useBrowserTimer.ts
Outdated
Show resolved
Hide resolved
* master: chore: update CODEOWNERS to some components to tag the current owner (microsoft#28949) fix(react-popover): Only apply modal attributes if the PopoverSurface traps focus (microsoft#28613) feat(react-table, react-components): export DataGridContextProvider (microsoft#28955) chore: decrease bundle size & adds fixtures (microsoft#28962) feat(react-utilities): create useAnimationFrame hook (microsoft#28948) fix(react-utilities): `useOnClickOutside` should consider text selection from inside to outside as inside click (microsoft#28765) docs(react-accordion): Added subcomponents to index story (microsoft#28956) applying package updates bugfix: ensure interop between assertSlots and old API (microsoft#28957) chore: rename imports from react-tree to react-components (microsoft#28946) applying package updates fix: Autofill queries the inputElement ownerDocument instead of document (microsoft#27312)
* master: (27 commits) feat: Add documentKeyboardEvent to OnVisibleChangeData when Tooltip is hidden via Escape (microsoft#28951) RFC: Component CSS Transitions/Animations on mount/unmount (microsoft#27328) 8.0 Azure Theme: Details list row focus contrast a11y bug fix (microsoft#28966) chore: update CODEOWNERS to some components to tag the current owner (microsoft#28949) fix(react-popover): Only apply modal attributes if the PopoverSurface traps focus (microsoft#28613) feat(react-table, react-components): export DataGridContextProvider (microsoft#28955) chore: decrease bundle size & adds fixtures (microsoft#28962) feat(react-utilities): create useAnimationFrame hook (microsoft#28948) fix(react-utilities): `useOnClickOutside` should consider text selection from inside to outside as inside click (microsoft#28765) docs(react-accordion): Added subcomponents to index story (microsoft#28956) applying package updates bugfix: ensure interop between assertSlots and old API (microsoft#28957) chore: rename imports from react-tree to react-components (microsoft#28946) applying package updates fix: Autofill queries the inputElement ownerDocument instead of document (microsoft#27312) Accordion : updated styles for accordion header cursor (microsoft#28850) Additional VR tests Charting Library (microsoft#28777) feat(react-motion): create react-motion-preview package scaffolding (microsoft#28947) chore: updates generator to use new slot API (microsoft#28916) chore: bumps version of esbuild-loader to v3.2.0 (microsoft#28878) ...
…e-motion * feat/use-motion-presence-hook: (25 commits) fix: revert changes to CODEOWNERS fix: remove duplicated code due to a merge conflict fix: upgrade tests fix: set motion as active when animations are disabled fix: remove debug function feat: refactor useMotion to a much more clean/performant logic fix: use correct type for MotionOptions fix: improve typings and documentation feat: Add documentKeyboardEvent to OnVisibleChangeData when Tooltip is hidden via Escape (microsoft#28951) fix: use correct boolean values RFC: Component CSS Transitions/Animations on mount/unmount (microsoft#27328) 8.0 Azure Theme: Details list row focus contrast a11y bug fix (microsoft#28966) fix: remove outdated changefile chore: update CODEOWNERS to some components to tag the current owner (microsoft#28949) fix(react-popover): Only apply modal attributes if the PopoverSurface traps focus (microsoft#28613) feat(react-table, react-components): export DataGridContextProvider (microsoft#28955) chore: decrease bundle size & adds fixtures (microsoft#28962) feat(react-utilities): create useAnimationFrame hook (microsoft#28948) fix(react-utilities): `useOnClickOutside` should consider text selection from inside to outside as inside click (microsoft#28765) docs(react-accordion): Added subcomponents to index story (microsoft#28956) ...

Create a new useAnimationHook. This hook is a helper to manage a browser requestAnimationFrame. It ensures that the requestAnimationFrame isn't set multiple times at once and is cleaned up when the component is unloaded.
As this new Hook share almost the same implementation of the useTimeout, I created a third hook to control browser timers (such as setTimeout, requestAnimationFrame, setInterval)