Очистка эффекта использования происходит после эффекта использования следующей страницы?

#react-native #react-hooks #react-navigation

Вопрос:

Я заметил противоинтуитивное поведение с очисткой useFocusEffect.

У меня есть страница 1 с эффектом использования и его очистка -> она переходит на страницу 2 с эффектом использования. В приведенном ниже коде я ожидаю увидеть в журналах 1, 2, 3 , но на самом деле вижу 1, 3, 2 .

Очистка страницы 1 запускается после эффекта использования Страницы 2.

 const Page1 = () => {
  const { navigate } = useNavigation();

  useFocusEffect(() => {
    console.log('1');
    return () => {
      console.log('2');
    };
  });

  return (
    <View>
      <Button onPress={() => navigate('PAGE2')} title="Go to Page2" />
    </View>
  );
};

const Page2 = () => {
  useEffect(() => {
    console.log('3');
  }, []);

  return null;
};
 

Смотрите раздел Закуски Expo (вы можете просмотреть журналы, нажав на нижнюю панель).

Это нормально? Я, кажется, не могу найти объяснение в документах.

Есть ли способ запустить очистку #2 до эффекта использования #3?

Комментарии:

1. Для меня он ведет себя так, как ожидалось -> > snack.expo.dev/@m.bahl/react-navigation-v5-lifecycle Журнал: 2 должен быть выполнен после журнала: 4

2. @MichaelBahl , с которым я не очень знаком useFocusEffect , я думал, что он будет вести себя так же useEffect , как и при повторном рендеринге. Т. Е. (поправьте меня, если я ошибаюсь) очистка 1-го рендеринга, А затем эффекты 2-го рендеринга. Есть ли способ провести некоторую очистку страницы 1 перед запуском эффектов Страницы 2?

3. Я не знаю, возможно ли это. Почему так необходимо выполнить очистку перед открытием нового экрана?