Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "patch",
"comment": "fix: use timeout instead of requestAnimationFrame for ssr",
"packageName": "@fluentui/react-utilities",
"email": "marcosvmmoura@gmail.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { canUseDOM } from '../ssr/canUseDOM';
import { useBrowserTimer } from './useBrowserTimer';

/**
Expand All @@ -9,6 +10,11 @@ import { useBrowserTimer } from './useBrowserTimer';
* @returns A pair of [requestAnimationFrame, cancelAnimationFrame] that are stable between renders.
*/
export function useAnimationFrame() {
const isDOM = canUseDOM();

// TODO: figure it out a way to not call global.requestAnimationFrame and instead infer window from some context
return useBrowserTimer(requestAnimationFrame, cancelAnimationFrame);
const setAnimationFrame = isDOM ? requestAnimationFrame : setTimeout;
const clearAnimationFrame = isDOM ? cancelAnimationFrame : clearTimeout;
Comment thread
marcosmoura marked this conversation as resolved.
Outdated

return useBrowserTimer(setAnimationFrame, clearAnimationFrame);
}