Migrating from eslint-plugin-react-hooks
Complete guide for migrating from eslint-plugin-react-hooks to ESLint React
This guide provides a comprehensive comparison between eslint-plugin-react-hooks and ESLint React rules to help you migrate your existing configuration.
Overview
ESLint React provides direct equivalents for the core rules in eslint-plugin-react-hooks, including both the classic hooks linting rules (exhaustive-deps, rules-of-hooks) and many of the newer React Compiler diagnostic rules introduced in the latest versions of the plugin.
Rules specific to the React Compiler runtime (such as config, gating, incompatible-library, and preserve-manual-memoization) do not have equivalents in ESLint React, as they validate compiler-specific configuration and behavior.
Rule Comparison Table
Legend
- ๐ง Fully supported - Rule is supported, and has an auto-fix
- ๐ข Mostly supported - Rule is supported but doesn't have an auto-fix
- ๐ก Partial support - Similar but not identical functionality
- ๐ด Not supported - No equivalent rule
- ๐งช Experimental - Rule is supported but marked as experimental
Table
The following table compares all documented rules from eslint-plugin-react-hooks with their ESLint React equivalents (see Notes for the exact scope):
eslint-plugin-react-hooks Rule Name | New Rule Name | Status |
|---|---|---|
exhaustive-deps | exhaustive-deps | ๐ง |
rules-of-hooks | rules-of-hooks | ๐ข |
config | ๐ด | |
error-boundaries | error-boundaries | ๐ก |
gating | ๐ด | |
globals | globals | ๐ก ๐งช |
immutability | immutability | ๐ก ๐งช |
incompatible-library | ๐ด | |
preserve-manual-memoization | ๐ด | |
purity | purity | ๐ก |
refs | refs | ๐ก ๐งช |
set-state-in-effect | set-state-in-effect | ๐ก |
set-state-in-render | set-state-in-render | ๐งช |
static-components | static-components | ๐งช |
unsupported-syntax | unsupported-syntax | ๐ข |
use-memo | use-memo | ๐ก |
ESLint React Column
- Rule names link to ESLint React documentation
- Multiple rules separated by
+indicate that together they provide equivalent functionality - Rules marked ๐งช are experimental and their behavior may change in future releases
- Rules marked ๐ด are React Compiler-specific and have no equivalent in ESLint React
Notes
- This table covers the documented rules of
eslint-plugin-react-hooks, i.e. the ones listed on react.dev and enabled by itsrecommendedpreset. The upstream package additionally shipsvoid-use-memo(enabled only in itsrecommended-latestpreset; partially covered byuse-memo), a deprecatedcomponent-hook-factoriesalias ofstatic-components, and several off-by-default internal diagnostic rules. - The ๐ง auto-fix of
exhaustive-depsis gated behind theenableDangerousAutofixThisMayCauseInfiniteLoopsoption; by default the rule provides editor suggestions instead. See the rule documentation for details. - Rules marked ๐ก have verified behavioral divergences from their upstream counterparts, tracked in each rule's
*.spec.diff.mdcomparison report in the repository.
Migration Preset
ESLint React provides a preset to disable conflicting rules from eslint-plugin-react-hooks:
disable-conflict-eslint-plugin-react-hooks- Disables all rules fromeslint-plugin-react-hooksthat have equivalents in ESLint React (e.g.,react-hooks/exhaustive-deps,react-hooks/rules-of-hooks, etc.)
This preset is useful when migrating from eslint-plugin-react-hooks to ESLint React, as it prevents rule conflicts while you transition your configuration.