A custom hook is a JavaScript function that starts with 'use' and lets you reuse stateful logic between components without repeating code.
Click to reveal answer
beginner
Why do developers create custom hooks?
To share and reuse logic easily across multiple components, making code cleaner and easier to maintain.
Click to reveal answer
intermediate
How do custom hooks improve code organization?
They separate complex logic from UI code, so components stay simple and focused on rendering.
Click to reveal answer
intermediate
Can custom hooks use other hooks inside them?
Yes, custom hooks can use built-in hooks like useState or useEffect to manage state and side effects internally.
Click to reveal answer
beginner
Give an example scenario where a custom hook is useful.
When multiple components need to fetch data from the same API and handle loading and error states, a custom hook can manage this logic once and share it.
Click to reveal answer
What is the main reason to use a custom hook in React?
ATo reuse stateful logic across components
BTo style components
CTo create class components
DTo write HTML inside JavaScript
✗ Incorrect
Custom hooks help reuse logic like state and effects across components, avoiding code duplication.
Which of these is true about custom hooks?
AThey cannot use other hooks
BThey can only be used once
CThey replace React components
DThey must start with 'use'
✗ Incorrect
Custom hooks must start with 'use' so React can identify them as hooks.
Custom hooks help keep components:
AWithout any state
BSimple and focused on UI
CDependent on class syntax
DLong and complex
✗ Incorrect
By moving logic to custom hooks, components stay clean and focused on rendering.
Can a custom hook use useState inside it?
AYes, it can manage its own state
BNo, hooks cannot be nested
COnly if it is a class component
DOnly outside React components
✗ Incorrect
Custom hooks can use built-in hooks like useState to manage internal state.
Which naming convention is correct for a custom hook?
AFetchData
BfetchDataHook
CuseFetchData
DcustomHook
✗ Incorrect
Custom hooks must start with 'use' to follow React's rules and conventions.
Explain why custom hooks are useful in React and how they help with code reuse.
Think about how you might share the same behavior in many places without repeating code.
You got /4 concepts.
Describe how a custom hook can improve the organization of a React app's code.
Consider how moving logic out of components helps keep things tidy.
You got /4 concepts.
Practice
(1/5)
1. Why do React developers create custom hooks?
easy
A. To reuse stateful logic across multiple components
B. To style components with CSS
C. To replace React components entirely
D. To write HTML inside JavaScript
Solution
Step 1: Understand the purpose of hooks
Hooks in React let you use state and other React features without writing a class.
Step 2: Identify why custom hooks are made
Custom hooks let you reuse stateful logic easily across different components, avoiding repetition.
Final Answer:
To reuse stateful logic across multiple components -> Option A
Quick Check:
Custom hooks = reuse logic [OK]
Hint: Custom hooks reuse logic, not styles or HTML [OK]
Common Mistakes:
Thinking custom hooks are for styling
Believing custom hooks replace components
Confusing hooks with HTML syntax
2. Which of the following is the correct way to name a custom hook in React?
easy
A. useFetchData
B. fetchDataHook
C. FetchData
D. hookUseFetch
Solution
Step 1: Recall React naming conventions for hooks
React requires custom hooks to start with the word 'use' to identify them as hooks.
Step 2: Check each option
Only 'useFetchData' starts with 'use', following React's convention.
Final Answer:
useFetchData -> Option A
Quick Check:
Custom hook names start with 'use' [OK]
Hint: Custom hooks always start with 'use' [OK]
Common Mistakes:
Not starting the name with 'use'
Using camel case without 'use' prefix
Confusing component names with hook names
3. What will be the output of this React component using a custom hook?
A. Throws an error because hooks can't be used here
B. Always shows 0 and never changes
C. A number that increases by 1 every second starting from 0
D. Shows a static string 'count'
Solution
Step 1: Analyze the custom hook useCounter
It initializes count to 0 and sets up a timer to increase count by 1 every second.
Step 2: Understand the component output
The Counter component uses useCounter and displays the count, which updates every second.
Final Answer:
A number that increases by 1 every second starting from 0 -> Option C
Quick Check:
useCounter returns incrementing count [OK]
Hint: Custom hooks can return changing state values [OK]
Common Mistakes:
Thinking count stays 0 forever
Believing hooks can't be used in functions
Assuming output is a string, not a number
4. Identify the error in this custom hook usage:
function useData() {
const [data, setData] = React.useState(null);
fetch('https://api.example.com/data')
.then(res => res.json())
.then(json => setData(json));
return data;
}
function App() {
const data = useData();
return <div>{JSON.stringify(data)}</div>;
}
medium
A. Custom hooks cannot return data
B. The fetch call should be inside useEffect to avoid infinite loops
C. useState is used incorrectly and should be replaced with useRef
D. The component should not call the custom hook
Solution
Step 1: Check where fetch is called in useData
fetch is called directly inside the hook body, causing it to run on every render, leading to infinite loops.
Step 2: Correct usage with useEffect
fetch should be inside a useEffect with an empty dependency array to run only once on mount.
Final Answer:
The fetch call should be inside useEffect to avoid infinite loops -> Option B
Quick Check:
Side effects go inside useEffect [OK]
Hint: Put side effects like fetch inside useEffect [OK]
Common Mistakes:
Calling fetch directly in hook body
Misusing useState instead of useEffect
Thinking hooks can't return values
5. You want to share logic for fetching user data and managing loading state across several components. Which approach best uses custom hooks to solve this?
hard
A. Store user data in a global variable outside React
B. Write the fetch logic separately in each component to avoid dependencies
C. Use a class component instead of hooks for shared logic
D. Create a custom hook that fetches user data and returns both data and loading state
Solution
Step 1: Understand the need for reusable logic
Fetching data and managing loading state is stateful logic that can be reused with a custom hook.
Step 2: Evaluate options for sharing logic
Creating a custom hook that returns data and loading state allows multiple components to share this logic cleanly.
Final Answer:
Create a custom hook that fetches user data and returns both data and loading state -> Option D
Quick Check:
Custom hooks share stateful logic best [OK]
Hint: Custom hooks bundle related state and logic for reuse [OK]
Common Mistakes:
Duplicating fetch code in every component
Using class components instead of hooks
Using global variables that break React's state flow
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.