askill
store-event-handlers-in-refs

store-event-handlers-in-refsSafety 95Repository

Store Event Handlers in Refs

0 stars
1.2k downloads
Updated 2/12/2026

Package Files

Loading files...
SKILL.md

Store Event Handlers in Refs

Store callbacks in refs when used in effects that shouldn't re-subscribe on callback changes.

Incorrect (re-subscribes on every render):

function useWindowEvent(event: string, handler: (e) => void) {
  useEffect(() => {
    window.addEventListener(event, handler);
    return () => window.removeEventListener(event, handler);
  }, [event, handler]);
}

Correct (stable subscription):

function useWindowEvent(event: string, handler: (e) => void) {
  const handlerRef = useRef(handler);
  useEffect(() => {
    handlerRef.current = handler;
  }, [handler]);

  useEffect(() => {
    const listener = (e) => handlerRef.current(e);
    window.addEventListener(event, listener);
    return () => window.removeEventListener(event, listener);
  }, [event]);
}

Alternative: use useEffectEvent if you're on latest React:

import { useEffectEvent } from 'react';

function useWindowEvent(event: string, handler: (e) => void) {
  const onEvent = useEffectEvent(handler);

  useEffect(() => {
    window.addEventListener(event, onEvent);
    return () => window.removeEventListener(event, onEvent);
  }, [event]);
}

useEffectEvent provides a cleaner API for the same pattern: it creates a stable function reference that always calls the latest version of the handler.

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

82/100Analyzed 2/20/2026

A focused, high-quality skill demonstrating the React pattern of storing event handlers in refs to prevent unnecessary re-subscriptions. Provides clear incorrect/correct examples, shows both ref-based and useEffectEvent approaches, and is highly actionable for React developers. The content is well-structured technical reference material that would benefit any React project.

95
80
70
75
85

Metadata

Licenseunknown
Version-
Updated2/12/2026
Publisherihj04982

Tags

api