Hej, zdefiniowałem sobie listener didFocus:

useEffect(() => {
    const didFocusListener = props.navigation.addListener('didFocus', payload => {
      foo();
    });

    return () => {
      didFocusListener.remove();
    };
  }, []);

Metoda foo() korzysta załóżmy z jakiejś zmiennej varA oraz varB

const [varA, setVarA] = useState('A'); i const [varB, setVarB] = useState('B);

Jeżeli wartości tych zmiennych varA i varB zmienią się w trakcie działania programu to ten listener jakby tylko pamięta te pierwsze wartości i metoda foo() widzi jedynie, że varA = A i varB = B.

Rozwiązałem to tak:

useEffect(() => {
    const didFocusListener = props.navigation.addListener('didFocus', payload => {
      foo(varA, varB);
    });

    return () => {
      didFocusListener.remove();
    };
  }, [varA, varB]);

ale nie wiem czy to ok?