DocsCloud UI HooksuseReducedMotion

useReducedMotion

Detect if user prefers reduced motion.

Import

import { useReducedMotion } from '@tidbcloud/uikit'

Usage

useReducedMotion detects if user prefers to reduce motion using the (prefers-reduced-motion: reduce) media query.

import { useReducedMotion } from '@tidbcloud/uikit'
import { Transition } from '@tidbcloud/uikit'
 
function Demo() {
  const reduceMotion = useReducedMotion()
 
  return (
    <Transition mounted={true} transition={reduceMotion ? 'fade' : 'slide-up'} duration={reduceMotion ? 0 : 200}>
      {(styles) => <div style={styles}>Content</div>}
    </Transition>
  )
}

API

The hook relies on window.matchMedia() API and will return false if the API is not available (for example, during server-side rendering), unless the initial value is provided.

import { useReducedMotion } from '@tidbcloud/uikit'
 
// Provide initial value for SSR
const reduceMotion = useReducedMotion(true)

Definition

interface UseMediaQueryOptions {
  getInitialValueInEffect: boolean
}
 
function useReducedMotion(initialValue?: boolean, options?: UseMediaQueryOptions): boolean