源码
packages/ui/src/components/use-prefers-reduced-motion.ts
// Adapted from ZCode commit 872ad96 (Apache-2.0); see licenses/third-party-notices.txt.
import { useEffect, useState } from "react";
export function usePrefersReducedMotion() {
const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);
useEffect(() => {
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
return;
}
const query = window.matchMedia("(prefers-reduced-motion: reduce)");
const update = () => {
setPrefersReducedMotion(query.matches);
};
update();
if (typeof query.addEventListener === "function") {
query.addEventListener("change", update);
return () => {
query.removeEventListener("change", update);
};
}
query.addListener(update);
return () => {
query.removeListener(update);
};
}, []);
return prefersReducedMotion;
}