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.
Index
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, globals, 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
- 🧪 Experimental - Rule is supported but marked as experimental
- ❌ Not supported - No equivalent rule
Table
The following table compares all rules from eslint-plugin-react-hooks with their ESLint React equivalents:
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
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 (ex: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.