React5 min read

React Custom Hooks

Create reusable custom hooks to share logic across components.

Sarah Johnson
December 20, 2025
0.0k0

Custom hooks let you reuse logic across components.

Creating Custom Hook

Custom hooks start with "use":

function useCounter(initialValue = 0) {
  const [count, setCount] = useState(initialValue);

  const increment = () => setCount(count + 1);
  const decrement = () => setCount(count - 1);
  const reset = () => setCount(initialValue);

  return { count, increment, decrement, reset };
}

Using Custom Hook

function App() {
  const { count, increment, decrement, reset } = useCounter(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>+</button>
      <button onClick={decrement}>-</button>
      <button onClick={reset}>Reset</button>
    </div>
  );
}

useFetch Hook

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(url)
      .then(res => res.json())
      .then(data => {
        setData(data);
        setLoading(false);
      });
  }, [url]);

  return { data, loading };
}

Using it:

function Users() {
  const { data, loading } = useFetch('/api/users');

  if (loading) return <p>Loading...</p>;
  return <div>{data.map(user => <p>{user.name}</p>)}</div>;
}

useLocalStorage Hook

function useLocalStorage(key, initialValue) {
  const [value, setValue] = useState(() => {
    const saved = localStorage.getItem(key);
    return saved || initialValue;
  });

  useEffect(() => {
    localStorage.setItem(key, value);
  }, [key, value]);

  return [value, setValue];
}

Remember

  • Hook names start with "use"
  • Can use other hooks inside
  • Reuse logic easily
  • Keep them simple

Next: Learn React Router!

#React#Hooks#Custom Hooks#Intermediate