Как раньше выйти из хука useEffect?

В документы сказано, что мы должны вызывать хуки только на верхнем уровне наших компонентов. Из-за API useEffect return уже зарезервирован для очистки, что заставило меня задаться вопросом, как я могу раньше выйти из хука useEffect, чтобы предотвратить глубокую вложенность моих операторов if.

// instead of
React.useEffect(() => {
  if (foo){
    // do something
  }
})

// I would rather write something like
React.useEffect(() => {
  if (!foo){
    // exit early and stop executing the rest of the useEffect hook
  }

  // do something
})

Как я могу этого добиться? В моем первом примере все может быстро запутаться со сложной условной логикой, особенно если учесть, что я не могу использовать useEffect внутри условного оператора.

Как уже упоминалось, просто выполнение return, как и в любой функции JS, будет работать. Но сначала может быть идея подумать о том, зачем вам нужно это условие. Иногда может быть лучше разделить компонент больше. Например, скажем, у нас есть компонент с именем MultiEdit, и мы хотим иметь свойство с именем editType, это будет отображать два разных стиля элементов управления, поэтому может потребоваться другая семантика useEffect, а не использование if (!style1) return и т. д., вы могли бы просто создайте 2 подкомпонента, скажем, EditStyle1 и EditStyle2 и т. д. Затем вы можете условно визуализировать их.

Keith 10.02.2019 12:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
29
1
12 482
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как и из любой функции, из нее можно выйти досрочно с помощью ключевого слова return.

Эти два фрагмента эквивалентны:

React.useEffect(() => {
  if (foo){
    // do something
  }
})


React.useEffect(() => {
  if (!foo){
    return;
  }

  // do something
})

Итак, очистка будет запущена только в том случае, если я верну функцию, подобную return () => /* cleanup */?

Mikey 10.02.2019 12:00

Это правильно. return;, return undefined; и вообще без возврата полностью взаимозаменяемы в JS.

Estus Flask 10.02.2019 12:05

Другие вопросы по теме