oxc-project/oxc · error · OxcDiagnostic

React Hook {hook_name} has a missing dependency: {deps_prett

Error message

React Hook {hook_name} has a missing dependency: {deps_pretty}

What it means

Raised by react/exhaustive-deps when a value used inside a hook callback is not listed in its dependency array (single missing dependency). Omitted dependencies cause stale closures and bugs when the value changes.

Source

Thrown at crates/oxc_linter/src/rules/react/exhaustive_deps.rs:123

                dep.span.into()
            }
        })
        .chain(std::iter::once(span.primary()));

    let mut message = if single {
        format!("React Hook {hook_name} has a missing dependency: {deps_pretty}")
    } else {
        format!("React Hook {hook_name} has missing dependencies: {deps_pretty}")
    };

    if let Some(dep) = mutable_ref_dependency {
        let _ = write!(
            message,
            ". Mutable values like '{dep}' aren't valid dependencies because mutating them doesn't re-render the component."
        );
    }

    OxcDiagnostic::warn(message)
        .with_labels(labels)
        .with_help("Either include it or remove the dependency array.")
        .with_error_code_scope(SCOPE)
}

fn unnecessary_dependency_diagnostic(hook_name: &str, dep_name: &str, span: Span) -> OxcDiagnostic {
    OxcDiagnostic::warn(format!("React Hook {hook_name} has unnecessary dependency: {dep_name}"))
        .with_label(span)
        .with_help("Either include it or remove the dependency array.")
        .with_error_code_scope(SCOPE)
}

fn dependency_array_not_array_literal_diagnostic(hook_name: &str, span: Span) -> OxcDiagnostic {
    OxcDiagnostic::warn(format!(
        "React Hook {hook_name} was passed a dependency list that is not an array literal. This means we can't statically verify whether you've passed the correct dependencies."
    ))
    .with_label(span)
    .with_help("Use an array literal as the second argument.")

View on GitHub (pinned to e1e7af627c)

Solutions

  1. Add the listed value to the dependency array.
  2. If the value should not retrigger the hook, memoize it with useRef/useCallback/useMemo.
  3. Move the value inside the callback if it does not need to be reactive.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/oxc_linter/src/rules/react/exhaustive_deps.rs:123 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of oxc-project/oxc@e1e7af627c (2026-08-20). Data as JSON: /api/errors/2b9f4ffb2fe4c69e. Report an issue: GitHub.