341 字
2 分钟
useDebugValue

它只影响调试面板#

import { useSyncExternalStore, useDebugValue } from 'react'
export function useOnlineStatus() {
const isOnline = useSyncExternalStore(subscribe, () => navigator.onLine, () => true)
useDebugValue(isOnline ? 'Online' : 'Offline')
return isOnline
}

在 React DevTools 里展开用到它的组件,会看到 OnlineStatus: "Online" 这一行。不写这句,那里显示的是底层的 true,得自己猜它是什么意思。

它不改变组件行为,也没有返回值。

第二个参数把格式化推后#

useDebugValue(date, date => date.toDateString())

格式化函数只在你在 DevTools 里查看这个组件时才被调用,入参是第一个参数。这样 toDateString() 不会每次渲染都跑一遍。

官方不建议每个 Hook 都加#

官方原话是:不要给每个自定义 Hook 都加调试值。它最能帮上忙的地方是共享库里的 Hook,以及内部结构复杂、直接看很难看懂的那些。

业务里只包了一层 useState 的简单 Hook 加它,只会让面板变成噪音。

几条边界#

它只在自定义 Hook 的顶层调用。写在普通组件里不会报错,但也没有效果。

别把密码、token 之类的值放进去,调试面板会原样显示。

别拿它的值做逻辑判断。它只负责显示,不参与渲染。

格式化函数的入参是第一个参数,不是这个 Hook 的返回值,别接错。

第 24 篇,共 39 篇本文属于系列

useDebugValue
https://www.choria.top/posts/hook-use-debug-value/
作者
乔瑞雅·克林威尔
发布于
2026-05-02
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 190 天

部分内容可能已过时