agentsclimarketplace

React hooks

Skill a5c-ai/babysitter/library/specializations/web-development/skills/react-hooks

Deep expertise in React hooks patterns including custom hooks, composition, optimization, and testing strategies.From its SKILL.md

Install
npx -y skills add a5c-ai/babysitter --skill react-hooks

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

4.2 KB, 827 tokens by cl100k_base, as published. Nobody here has run it

React Hooks Skill

Expert assistance for implementing React hooks with advanced patterns, composition strategies, and performance optimization.

Capabilities

  • Design and implement custom hooks with proper abstractions
  • Compose hooks for complex state and side effect management
  • Optimize hook performance with memoization patterns
  • Implement hooks for data fetching, subscriptions, and local storage
  • Test custom hooks with React Testing Library
  • Apply hooks rules and best practices

Usage

Invoke this skill when you need to:

  • Create custom hooks for reusable logic
  • Optimize existing hooks for performance
  • Implement complex state logic with useReducer
  • Build data fetching hooks with caching
  • Create form handling hooks

Inputs

ParameterTypeRequiredDescription
hookNamestringYesName of the hook (use prefix)
purposestringYesWhat the hook should accomplish
parametersarrayNoInput parameters for the hook
returnTypestringNoExpected return value structure
dependenciesarrayNoExternal dependencies needed

Configuration Example

{
  "hookName": "useDebounce",
  "purpose": "Debounce a value with configurable delay",
  "parameters": [
    { "name": "value", "type": "T" },
    { "name": "delay", "type": "number" }
  ],
  "returnType": "T"
}

Hook Patterns

State Management Hooks

// useReducer for complex state
function useToggle(initialValue = false) {
  const [value, setValue] = useState(initialValue);
  const toggle = useCallback(() => setValue(v => !v), []);
  const setTrue = useCallback(() => setValue(true), []);
  const setFalse = useCallback(() => setValue(false), []);
  return { value, toggle, setTrue, setFalse };
}

Effect Hooks

// useEffect with cleanup
function useEventListener<K extends keyof WindowEventMap>(
  eventName: K,
  handler: (event: WindowEventMap[K]) => void,
  element: Window | HTMLElement = window
) {
  const savedHandler = useRef(handler);

  useEffect(() => {
    savedHandler.current = handler;
  }, [handler]);

  useEffect(() => {
    const eventListener = (event: WindowEventMap[K]) => savedHandler.current(event);
    element.addEventListener(eventName, eventListener);
    return () => element.removeEventListener(eventName, eventListener);
  }, [eventName, element]);
}

Data Fetching Hooks

function useFetch<T>(url: string, options?: RequestInit) {
  const [data, setData] = useState<T | null>(null);
  const [error, setError] = useState<Error | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const abortController = new AbortController();

    const fetchData = async () => {
      try {
        setLoading(true);
        const response = await fetch(url, {
          ...options,
          signal: abortController.signal,
        });
        if (!response.ok) throw new Error(response.statusText);
        const json = await response.json();
        setData(json);
      } catch (err) {
        if (err instanceof Error && err.name !== 'AbortError') {
          setError(err);
        }
      } finally {
        setLoading(false);
      }
    };

    fetchData();
    return () => abortController.abort();
  }, [url]);

  return { data, error, loading };
}

Best Practices

  • Always follow the Rules of Hooks
  • Use the exhaustive-deps ESLint rule
  • Memoize callbacks passed to child components
  • Return stable references when possible
  • Handle cleanup in useEffect properly
  • Use refs for values that shouldn't trigger re-renders

Target Processes

  • react-application-development
  • custom-hooks-library
  • state-management-setup
  • performance-optimization
  • frontend-testing

What ships with it: 1 file

1.6 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,059. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.