Invalid hook call warning in React - Fix (2026) | Tutorials Logic
What is This Error?
The "Invalid hook call" warning occurs when React Hooks are called in an invalid context. This typically happens due to mismatched React versions, duplicate React installations, calling Hooks outside React components, or breaking the Rules of Hooks.
Error Message:
Warning: Invalid hook call. Hooks can only be called inside of the body of a function component.
Common Causes
Quick Fix (TL;DR)
# Check for duplicate React
npm ls react
# Fix duplicate React
npm dedupe
# or
rm -rf node_modules package-lock.json
npm install
# Ensure matching versions
npm install react@latest react-dom@latest
Common Scenarios & Solutions
Scenario 1: Duplicate React Installation
The most common cause — having multiple copies of React in your project.
# Check for multiple React versions
npm ls react
# or
yarn why react
# You might see:
# ├── react@18.2.0
# └─┬ some-library@1.0.0
# └── react@17.0.2 ← Duplicate!
# Solution 1: Dedupe
npm dedupe
# Solution 2: Clean install
rm -rf node_modules package-lock.json
npm install
# Solution 3: Use resolutions (package.json)
{
"resolutions": {
"react": "18.2.0",
"react-dom": "18.2.0"
}
}
# Solution 4: Use overrides (npm 8.3+)
{
"overrides": {
"react": "18.2.0",
"react-dom": "18.2.0"
}
}
Scenario 2: Mismatched React and React-DOM Versions
// package.json
{
"dependencies": {
"react": "18.2.0",
"react-dom": "17.0.2" // ❌ Mismatched version!
}
}
# Install matching versions
npm install react@18.2.0 react-dom@18.2.0
# Or use latest for both
npm install react@latest react-dom@latest
Scenario 3: Calling Hooks in Regular Functions
// ❌ Regular function, not a component
function fetchData() {
const [data, setData] = useState(null); // Invalid hook call!
// ...
}
// ❌ Called outside component
const data = useState(null); // Invalid hook call!
function App() {
return {data};
}
// ✅ Create a custom hook (starts with "use")
function useFetchData() {
const [data, setData] = useState(null);
// ...
return data;
}
// ✅ Call hooks inside component
function App() {
const [data, setData] = useState(null); // ✅ Inside component
return {data};
}
Scenario 4: Linked React in Library Development
# When developing a library with npm link
cd my-library
npm link
cd ../my-app
npm link my-library # Creates duplicate React!
# Link React from the app to the library
cd my-app/node_modules/react
npm link
cd ../react-dom
npm link
cd ../../../my-library
npm link react react-dom
# Or use peerDependencies in library
{
"peerDependencies": {
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
}
}
Best Practices to Avoid This Error
Related Errors
Key Takeaways
- Invalid hook call usually means duplicate React installations or version mismatches
- React and React-DOM versions must match exactly
- Use npm ls react to check for duplicate React installations
- Hooks can only be called inside React function components or custom hooks
- Custom hooks must start with "use" prefix
- Use peerDependencies when building React libraries to avoid bundling React
Frequently Asked Questions
Level Up Your React js Skills
Master React js with these hand-picked resources
10,000+ learners
Free forever
Updated 2026
Related React Topics