React 与用户偏好:尊重用户已选择的操作系统设置

发布日期:2026-05-14 10:35:04   浏览量 :3
发布日期:2026-05-14 10:35:04  
3

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

React 与用户偏好:尊重用户已选择的操作系统设置

每个现代操作系统都会在某个时刻询问用户,他们想要什么样的用户界面。深色模式还是浅色模式。高对比度还是正常对比度。开启动画还是精简动画。从左到右还是从右到左。首选语言。用户在系统设置中选择一次,从那一刻起,机器上每一个构建良好的原生应用程序都会尊重这一选择。而你发布的 Web 应用程序通常不会这样做——它使用自己的深色模式切换开关、自己的动画库、自己默认为英文的文案,而操作系统偏好则变成了某人错误跟踪器中的一条五行备注。

修复方法很简单,且应用程序编程接口(API)表面很窄。浏览器通过 window.matchMedianavigator.language 暴露操作系统偏好,每个现代 React 应用程序都可以在一个下午内将它们连接起来。问题不在于能力;而在于这些连接逻辑存在于每个 Web 功能都深陷的 useEffect/useState/服务端渲染(SSR)不匹配的泥潭中,因此被无限期推迟。ReactUse 为此提供了七个专注的钩子函数,它们共同涵盖了真正重要的四个用户偏好维度:主题、运动效果、对比度和区域设置。

本文将逐一介绍每一个钩子——它返回什么,隐藏了什么错误,以及 resulting 组件的结构是怎样的。最后,我们将它们组合成一个单一的 useAppearance() 钩子,一次性读取这四个信号。

1. usePreferredDark — 启动主题系统的布尔值

这是最简单的一个。usePreferredDark() 如果用户的操作系统设置为深色模式,则返回 true,否则返回 false。它是 window.matchMedia('(prefers-color-scheme: dark)').matches 的一层薄包装,处理了否则你需要自行处理的两件事:服务端渲染(SSR)(没有 window 对象)和实时更新(用户可以在你的标签页打开时切换操作系统开关,应用程序应做出反应)。

手动实现方式

import { useEffect, useState } from "react";

function ManualDark() {
  const [dark, setDark] = useState(false);

  useEffect(() => {
    const mq = window.matchMedia("(prefers-color-scheme: dark)");
    setDark(mq.matches);
    const onChange = (e: MediaQueryListEvent) => setDark(

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部