Рубрики
Без рубрики

Реагистрационные крюки: Useffect

Прежде чем говорить о крючке с использованием использования, позвольте мне спросить вас: Вы когда-нибудь пытались сделать что-то вроде: … Помечено с реагированием, крючками, JavaScript, начинающими.

Прежде чем говорить о useffect. Крюк, позвольте мне спросить вас: Вы когда-нибудь пытались сделать что-то вроде:

 document.getElementById("someId").classList.add("someClass");

а потом выяснил, что реагирование теперь жаловалось TypeError: не удается прочитать свойство «Classlist» NULL ?

Ну, я наиболее наверняка имел.

Сначала я был бы как: « Что сейчас происходит? У меня есть элемент div с разумно Просто прямо там !!! И тогда я бы понял: « AHA, RECT не закончил позиционирование всех моих HTML-элементов на странице еще. Это не знает о Div с разумно все же. Итак, мой девл это ноль, чтобы реагировать.

Теперь поговорим о Useffect () Отказ

Когда я думаю о Useffect () Я представляю, что это как первая дверь, которая реагирует, в тот момент, когда это делается с позиционированием всех элементов HTML на странице. И поэтому именно здесь мы должны поставить код, который мы хотим запустить сразу после этого, так что реагирование никогда не жалуется на недостающие элементы.

С момента реагирования каждый раз, когда изменение происходит с компонентом, он стучит/звонки Useffect () после каждого визуализации.

Самая простая структура Useffect Похоже:

useEffect( ()=>{
     // code to run after every render/re-render
});

Давайте посмотрим простой пример.

import React {useState, useEffect} from 'react';

const App =()=> {
  let [circleBackgroundColor, setCircleBackgroundColor] = useState("lightblue");

  useEffect(()=>{
       // change the bg-color of the body after every render
       document.body.style.backgroundColor = getRandomColor();
    })

    const changeCircleBackgroundColor = ()=>{
      // change the value of circleBackgroundColor
      setCircleBackgroundColor(getRandomColor())
    }

    return(
      
) } const getRandomColor = ()=>{ return "#" + Math.random().toString(16).slice(2,8); }

Уведомление здесь, что BG-цвет Тело Изменения не только на освежающих странице, но и на изменение цвета фона круга Div.

Почему это происходит?

Об обновлении страницы BG-цвет Тело изменения, потому что React Callse useffect. Сразу после первого визуализации.

На изменении BG-цвет круга Div BG-цвет Тело изменения, потому что при изменении переменной состояния ОБРАЗБУЧКУБЛОКЛОР Реагирование должно повторно рендерировать Приложение . И после перевода, он называет Useffect опять таки.

Но подожди, это даже эффективен? Я имею в виду, звонит Useffect Каждый раз крошечный, малое изменение происходит с компонентом, это так эффективно?

Нет это не так. И большую часть времени мы не хотели бы, чтобы это произошло.

Useffect Занимает второй дополнительный параметр, называемый массивом зависимостей. Мы передаем массив зависимости в Useffect Чтобы сказать отреагировать не беспокоить Useffect Каждый раз, когда изменение происходит с компонентом. Сказать реагирование, что просто нужно следить за переменными начисления зависимости и что ему нужно позвонить Useffect только тогда, когда любая из этих переменных изменяется.

Так вот так Useffect должен выглядеть так:

useEffect(()=>{
     // code to run only on the first render and when depency1 or/and depency2 changes.
}, 
// the dependency array
[depency1, depency2]);

Давайте внести несколько изменений в наш последний пример и передайте массив зависимости в Useffect Отказ

...
// onOff will be a dependency to useEffect
let [onOff, setOnOff] = React.useState(true);
...
useEffect(()=>{
       document.body.style.backgroundColor = getRandomColor();
    // add onOff in the dependency array
    }, [onOff])
}
...
 // just a button to toggle the value of onOff
 

Если компонент имеет Useffect Первое, что реагирует после первого визуализации, чтобы позвонить Useffect – имеет ли он массив зависимости или нет. После этого реагировать, чтобы узнать, если Useffect имеет массив зависимости или нет. И исходя из этого знания реагировать, ну, хорошо реагирует.

Если нет массива зависимости в useffect. Реагировать, чтобы помнить, чтобы позвонить useffect. Ведь будущее оказывает.

Если там это Массив зависимости передан useffect. Реакция должна следить за всеми этими зависимостями. И после того, как какие-либо будущие изменения случаются с любым из них, реагировать придется позвонить Useffect Отказ

Давайте посмотрим, что в коде.

В этом примере при реагировании звонков Useffect После первого визуализации он знает, что есть ONOFF зависимость передана ему. Итак, тогда помнит, что ему не придется позвонить useffect. Разве ONOFF изменения.

Следовательно, BG-цвет Тело меняется только на первом визуализации и каждый раз ONOFF изменения.

Обратите внимание, что изменение BG-цвет круга Div не влияет на Тело больше. Реагировать больше не звонить useffect. После смены ОБРАЗБУЧКУБЛОКЛОР Отказ

Так что теперь мы ограничили звонки на Useffect От ” После каждого рендеринга/повторного визуализации ” на ” только после первого визуализации и всех повторных рендеров, вызванных изменениями зависимостей .”

Что, если мы хотим ограничить звонки даже меньше, чем это? Что если мы хотим запустить Useffect только один раз, после первого визуализации?

Мы можем достичь этого, передавая пустой массив в качестве массива зависимости в Useffect Отказ Делая это, Rect позвонит useffect. После первого визуализации, а затем забыть все об этом. Это никогда не позвонит это снова.

Примечание : Вы должны быть осторожны при использовании [] как массив зависимости. Убедитесь, что Useffect Не содержит никаких переменных ( состояние или реквизит ) или функции изнутри его компонента. Рефакторист и полоса Useffect Из всех переменных и функций изнутри его компонента перед использованием [] в качестве массива зависимости, или вы должны перечислить их как зависимости.

Последнее упомяновение на эту тему мы можем вернуть функцию в конце Useffect Отказ Эта функция проходит после каждого повторного визуализации (справа прямо перед новым эффектом), чтобы убрать после эффекта от последнего визуализации. Он также работает прямо до того, как компонент удаляется из DOM.

Если мы немного изменимся в коде, образуем более ранний пример:

    useEffect(()=>{
      // add a delay to see the effect of the clean-up function
      setTimeout(()=>{  
       document.body.style.backgroundColor = getRandomColor()
       }
      , 500);
       // the clean up function
       return ()=>{
          // it cleans up the bg-color of the body 
          // just right before the new effect tasks a place
          // and changes it again
          document.body.style.backgroundColor = "white";
       }
    }, [onOff])

Здесь, когда мы переключаем ONOFF Функция очистки проходит для очистки BG-Color of Тело до того, как новый эффект пройдет и снова изменяет его.

Вот и все. Спасибо за чтение.

Оригинал: “https://dev.to/hajarnasr/react-hooks-useeffect-1816”