DEV Community

Nguyễn Hữu Hiếu
Nguyễn Hữu Hiếu

Posted on • Edited on

React Native Navigation: useFocus to reload the screen every time back

  • Custom focus when using ReactNativeNavigation
import {useNavigation} from '@react-navigation/native'; import {useState, useEffect} from 'react'; export const useFocus = () => { const navigation = useNavigation(); const [isFocused, setIsFocused] = useState(false); const [focusCount, setFocusCount] = useState(0); const isFirstTime = focusCount === 1; useEffect(() => { const unsubscribeFocus = navigation.addListener('focus', () => { setIsFocused(true); setFocusCount(prev => prev + 1); }); const unsubscribeBlur = navigation.addListener('blur', () => { setIsFocused(false); }); return () => { unsubscribeFocus(); unsubscribeBlur(); }; }); return {isFocused, isFirstTime, focusCount}; }; 
Enter fullscreen mode Exit fullscreen mode

How to use

const App = () => { const {focusCount, isFocused} = useFocus(); useEffect(() => { if (focusCount === 1 && isFocused) { // this is the first time focus => init screen here } }); useEffect(() => { if (focusCount > 1 && isFocused) { // trigger when you navigate back from another screen // you can background reload data here ... } }); } 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)