# Immunize React Hook Missing Dep

> Use when writing React components with useEffect or useCallback to ensure every reactive value referenced in the hook body appears in the dependency array.

- **Type:** Skill
- **Install:** `agentstack add skill-viditkbhatnagar-immunize-react-hook-missing-dep`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [viditkbhatnagar](https://agentstack.voostack.com/s/viditkbhatnagar)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [viditkbhatnagar](https://github.com/viditkbhatnagar)
- **Source:** https://github.com/viditkbhatnagar/immunize/tree/main/src/immunize/patterns/react-hook-missing-dep
- **Website:** https://pypi.org/project/immunize/

## Install

```sh
agentstack add skill-viditkbhatnagar-immunize-react-hook-missing-dep
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# react-hook-missing-dep

When you write `useEffect` or `useCallback`, list every reactive value the
body reads in the dependency array. A "reactive value" is anything whose
reference can change between renders: props, state from
`useState`/`useReducer`, context values, and other hook results.

Declare the dep even if it feels obvious that the value is stable. React's
exhaustive-deps lint catches this, and relying on it slows you down; write
the array correctly the first time.

## Example

Wrong — `count` changes but is missing from the deps array, so the effect
uses the stale value from the first render:

```jsx
function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `Count: ${count}`;
  }, []);

  return  setCount(count + 1)}>{count};
}
```

Right — `count` is declared, so the effect re-runs when it changes:

```jsx
function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `Count: ${count}`;
  }, [count]);

  return  setCount(count + 1)}>{count};
}
```

## When an empty deps array is correct

Only when the effect genuinely runs once and the body references NO
reactive values. If you write `[]` to "silence the warning," either move
the stable reference outside the component or wrap the function in
`useCallback` with its own correct deps. Do not paper over missing deps
with `eslint-disable` comments.

## Immunity note

This pattern is a source-level check, not a runtime behavioral test. The
verification asserts the deps array lists every `useState` identifier the
hook body references. It cannot catch every stale-closure bug (some are
semantic), but it prevents the most common shape the AI produces.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [viditkbhatnagar](https://github.com/viditkbhatnagar)
- **Source:** [viditkbhatnagar/immunize](https://github.com/viditkbhatnagar/immunize)
- **License:** Apache-2.0
- **Homepage:** https://pypi.org/project/immunize/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-viditkbhatnagar-immunize-react-hook-missing-dep
- Seller: https://agentstack.voostack.com/s/viditkbhatnagar
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
