把 useDebugValue 加入你的React调试工具库
#react
目录
1. 总结
- useDebugValue(value, formatFn?) :用于在 DevTools 中显示当前值
- value: 要显示的调试值
- formatFn: (可选) 格式化函数,用于格式化调试值
2. useDebugValue 基本介绍
useDebugValue
是一个用于在 React DevTools 中显示自定义 hook 标签的 Hook。它的主要目的是帮助开发者在调试时更好地理解自定义 Hook 的内部状态
2.1. 基本语法
useDebugValue(value, formatFn?)
参数说明:
- value: 要显示的调试值
- formatFn: (可选) 格式化函数,用于格式化调试值
3. 使用方法
3.1. 基本使用
function useCustomHook(initialValue) {
const [value, setValue] = useState(initialValue);
// 在 DevTools 中显示当前值
useDebugValue(value);
return [value, setValue];
}
// 使用这个 hook
function MyComponent() {
const [value, setValue] = useCustomHook('initial');
return <div>{value}</div>;
}
3.2. 使用格式化函数
function useUserStatus(userId) {
const [isOnline, setIsOnline] = useState(false);
useDebugValue(isOnline, (online) =>
online ? 'Online' : 'Offline'
);
return isOnline;
}
3.3. 复杂对象的格式化
function useDataFetching(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useDebugValue(
{ data, loading, error },
state => ({
status: state.loading ? 'loading' : state.error ? 'error' : 'success',
dataLength: state.data?.length || 0,
errorMessage: state.error?.message
})
);
useEffect(() => {
fetch(url)
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
})
.catch(err => {
setError(err);
setLoading(false);
});
}, [url]);
return { data, loading, error };
}
4. 实际示例:带图
export function useOnlineStatus() {
const isOnline = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
// useDebugValue
useDebugValue(isOnline ? "✅ Online(useDebugValue)" : "❌ Disconnected(useDebugValue)")
return isOnline;
}