snippetjavascriptTip
Label your useState values in React developer tools
Viewed 0 times
developertoolsyourusestatereactlabelvalues
Problem
When working with multiple
This hook is obviously meant mainly for development, but it can also be useful when creating React component or hook libraries. Additionally, you can easily abstract it in a way that the label is ignored in production builds. An example would be exporting a hook that defaults back to
useState() hooks in React, things can get a bit complicated while debugging. Luckily, there's an easy way to label these values, using the useDebugValue() hook to create a custom useStateWithLabel hook:This hook is obviously meant mainly for development, but it can also be useful when creating React component or hook libraries. Additionally, you can easily abstract it in a way that the label is ignored in production builds. An example would be exporting a hook that defaults back to
useState() when building for a production environment.Solution
const useStateWithLabel = (initialValue, label) => {
const [value, setValue] = useState(initialValue);
useDebugValue(`${label}: ${value}`);
return [value, setValue];
};
const Counter = () => {
const [value, setValue] = useStateWithLabel(0, 'counter');
return (
<p>{value}</p>
);
};
ReactDOM.createRoot(document.getElementById('root')).render(
<Counter />
);
// Inspecting `Counter` in React developer tools will display:
// StateWithLabel: "counter: 0"Code Snippets
const useStateWithLabel = (initialValue, label) => {
const [value, setValue] = useState(initialValue);
useDebugValue(`${label}: ${value}`);
return [value, setValue];
};
const Counter = () => {
const [value, setValue] = useStateWithLabel(0, 'counter');
return (
<p>{value}</p>
);
};
ReactDOM.createRoot(document.getElementById('root')).render(
<Counter />
);
// Inspecting `Counter` in React developer tools will display:
// StateWithLabel: "counter: 0"Context
From 30-seconds-of-code: use-state-with-label
Revisions (0)
No revisions yet.