一个 浏览器暗黑模式的监听 Hook

# 使用

监听浏览器是否切换成暗黑模式,是的话返回 true,这个主要适用于浏览器的风格切换里面,结合 scss 的全局颜色变量,可以实现项目的模式跟随浏览器的模式切换

  • 主要是通过 window.matchMedia('(prefers-color-scheme: dark)') 这个 Web API,检测用户是否设置了暗黑模式偏好

# 实现代码

点击 展开/收起 jsx 代码
/**
 * @des 浏览器暗黑模式监听hook
 */
import React, { useState, useEffect } from 'react';

export const useDarkMode = () => {
  const [darkMode, setDarkMode] = useState(
    window.matchMedia &&
      window.matchMedia('(prefers-color-scheme: dark)').matches,
  );

  useEffect(() => {
    const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
    const handleChange = (event) => {
      setDarkMode(event.matches);
    };

    // 监听事件
    mediaQuery.addEventListener('change', handleChange);

    // 组件卸载时移除监听
    return () => mediaQuery.removeEventListener('change', handleChange);
  }, []);

  return darkMode;
};