React Native uses Hooks to manage state and side effects in functional components. Hooks simplify component logic and improve performance. This guide covers the most commonly used Hooks in React Native with examples.

1. What Are Hooks in React Native?
Hooks are functions that let you use state and other React features in functional components without writing a class. Introduced in React 16.8, Hooks make code cleaner, reusable, and easier to maintain.
2. Commonly Used Hooks in React Native
2.1 useState
- Manages state in a functional component.
- Updates component state without using
this.setState
.
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
const Counter = () => {
const [count, setCount] = useState(0);
return (
<View>
<Text>Count: {count}</Text>
<Button title="Increase" onPress={() => setCount(count + 1)} />
</View>
);
};
export default Counter;
2.2 useEffect
- Handles side effects like API calls, event listeners, and subscriptions.
- Runs after the component renders.
import React, { useState, useEffect } from 'react';
import { View, Text } from 'react-native';
const Timer = () => {
const [time, setTime] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setTime(prevTime => prevTime + 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return <Text>Time: {time}s</Text>;
};
export default Timer;
2.3 useContext
- Provides a way to share global state without prop drilling.
import React, { useContext } from 'react';
import { View, Text } from 'react-native';
import { ThemeContext } from './ThemeContext';
const ThemedComponent = () => {
const theme = useContext(ThemeContext);
return <Text style={{ color: theme.color }}>Hello, Themed World!</Text>;
};
export default ThemedComponent;
2.4 useRef
- Creates a mutable reference that persists across renders.
- Useful for accessing DOM elements and keeping values without re-rendering.
import React, { useRef } from 'react';
import { TextInput, Button, View } from 'react-native';
const InputFocus = () => {
const inputRef = useRef(null);
return (
<View>
<TextInput ref={inputRef} placeholder="Type here..." />
<Button title="Focus Input" onPress={() => inputRef.current.focus()} />
</View>
);
};
export default InputFocus;
2.5 useMemo
- Optimizes performance by memoizing values.
- Prevents unnecessary recalculations.
import React, { useState, useMemo } from 'react';
import { View, Text, Button } from 'react-native';
const ExpensiveCalculation = ({ count }) => {
const squared = useMemo(() => {
return count * count;
}, [count]);
return <Text>Squared Value: {squared}</Text>;
};
const App = () => {
const [count, setCount] = useState(1);
return (
<View>
<Button title="Increase" onPress={() => setCount(count + 1)} />
<ExpensiveCalculation count={count} />
</View>
);
};
export default App;
2.6 useCallback
- Prevents unnecessary function recreation.
- Useful when passing functions to child components.
import React, { useState, useCallback } from 'react';
import { View, Button } from 'react-native';
const ChildComponent = React.memo(({ onClick }) => {
console.log('Rendered');
return <Button title="Click Me" onPress={onClick} />;
});
const App = () => {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
<View>
<ChildComponent onClick={handleClick} />
</View>
);
};
export default App;
3. Best Practices for Using Hooks in React Native
- Use
useState
for simple state management. - Use
useEffect
carefully to avoid unnecessary re-renders. - Use
useContext
for global state management instead of prop drilling. - Use
useRef
for DOM access and storing values across renders. - Use
useMemo
anduseCallback
to optimize performance.
Conclusion
Hooks make React Native development simpler and more efficient. By using Hooks properly, you can write cleaner, reusable, and performance-optimized components. Start using Hooks in your React Native projects today! See more topics