#reactjs #use-effect
#reactjs #use-effect
Вопрос:
Я прочитал документы useEffect
и понимаю, как это упрощает жизнь, чем методы жизненного цикла. И все же мне интересно, без чего это было бы невозможно useEffect
?
Например, вместо (весь код является фиктивным кодом)
useEffect(networkRequest.then(update state));
разве я не мог просто использовать
// inside functional component
function App() {
networkRequest.then(update state)
}
Комментарии:
1.
couldn't I just use
Нет, вы не могли, потому что, как только вы установите состояние, функция будет вызвана снова, начнется новый сетевой запрос, состояние будет установлено, и цикл повторяется.
Ответ №1:
Что вы имеете в виду под «упрощает жизнь, чем методы жизненного цикла»? Реагирующие хуки — это то, как вы используете жизненный цикл компонента в функциональных компонентах.
Точно так же, как метод render
жизненного цикла компонентов на основе классов должен быть чистой функцией без побочных эффектов, так и to — это все тело функционального компонента. Тело функционального компонента — это функция «render».
// inside functional component
function App() {
networkRequest.then(update state)
}
В приведенном выше, как написано, нет защиты, защищающей побочный эффект сетевого запроса или обновления состояния… он просто обновит состояние и повторный запуск, а также обновит состояние и повторный запуск, … до тошноты, или, другими словами, бесконечный цикл рендеринга.
Реагирующие хуки — это то, что позволяет вам использовать жизненный цикл компонента в функциональных компонентах.
Чтобы прямо ответить на ваш вопрос, хотя:
И все же мне интересно, что было бы невозможно без useEffect?
Было бы невозможно вызвать побочные эффекты, такие как любые асинхронные сетевые запросы, аутентификация и т.д… Было бы невозможно вызвать какой-либо конкретный компонент при монтировании или повторном запуске. Было бы невозможно запустить какую-либо конкретную логику при обновлении определенного значения состояния / реквизита.