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

Как разрушать основы реактивных крюков

Крючки стали довольно мощной новой особенностью реагирования. Они могут быть пугающими, если вы не уверены, что происходит за кулисами. Красота теперь способна управлять состоянием простым (и многоразовым) способом внутри функциональных компонентов. Но почему бы не использовать

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

Но почему бы не использовать класс? Не оставляя слишком далеко от темы, функции предоставляют более простым способом написать свои компоненты, направляющие вас, чтобы написать чистящим и более многоразовым способом. Бонус: это обычно облегчает писать тесты.

Есть Много использования случаи для крючков Так что я не буду погружаться в примеры. Не должно быть слишком плохо, чтобы встать на скорость с несколькими быстрыми линиями. Ради этой статьи давайте предположим, что файлы cookers браузера не вещь, и это съедобный тип.

Дайвинг в банку печенья

Здесь у нас есть MyCookies , функциональный компонент, который мы можем рассмотреть нашу банку cookie. Допустим, мы хотим внутренне отслеживать, сколько печенье у нас в банке. С новыми крючками API мы можем добавить простую строку, используя Уместите справиться с работой.

const MyCookies = () => {
  const [ cookies, setCookieCount ] = useState(0);
  ...
};

Подождите, как мы получим куки из этого?

Если вы думаете, что вышеизложенное является магией и задается вопросом, как устанавливаются значения в массиве, вам нужно понять основы разрушения массива.

Хотя деструктурируют объект, используют один и тот же ключ, где бы вы ни пытались его вытащить, массивы разрушения, используя порядок элементов в массиве.

const [ one, two ] = [ 1, 2 ];
console.log(one); // 1
console.log(two); // 2

Хотя вышеизложенное, похоже, он называет их в определенном порядке, он не так, как показано ниже:

const [ two, one ] = [ 1, 2 ];
console.log(two); // 1
console.log(one); // 2

Не собираясь слишком далеко по технической кролике, Уместите Это функция, которая возвращает массив, который мы разрушаем для использования в нашем компоненте.

Как насчет 0 внутри вызова Уместите сам? Это просто начальное значение, к которому мы устанавливаем состояние состояния. В этом случае мы к сожалению, начнем с 0 печенья.

На самом деле, используйте состояние

Как только у нас наш разрушитель печенье и setcookiescount Функция, мы можем начать взаимодействовать с локальным состоянием компонента, как будто вы могли бы использовать SetState в классе компонента.

Время от времени наше Печенье Значение будет то, что вызов Уместите внутреннее государственное значение, похожее на то, что вы можете увидеть с Это Отказ Чтобы обновить это значение, мы можем просто позвонить setcookiescount Отказ

const MyCookies = () => {
  const [ cookies, setCookieCount ] = useState(0);
  return (
    <>
      

Cookies: { cookies }

); };

Если вы больше используете синтаксис класса, вы можете обновить состояние, используя this.setState Смотря что-то вроде этого:

const MyCookies = () => {
  const [ cookies, setCookieCount ] = useState(0);
  useEffect(() => {
    getCookieCount().then((count) => {
      setCookieCount(count);
    })
  });
  ...
};

Как использовать эффекты

Часто компоненты нуждаются в способе создания побочных эффектов, которые не обязательно прерывают функциональный поток функционального компонента. Скажем, у нас есть количество файлов cookie, которые мы где-то сохранили на сервере, мы можем захотеть привлечь этот счет, когда приложение нагрузки.

const MyCookies = () => {
  const [ cookies, setCookieCount ] = useState(0);
  useEffect(() => {
    getCookieCount().then((count) => {
      setCookieCount(count);
    })
  }, []);
  ...
};

После того, как компонент рендерирует все внутри Useffect будет работать. Любые побочные эффекты, происходящие из Useffect произойдет только после завершения рендера. Что сказал, однажды Useffect Беги, мы огонь getcookient и использовать наши предыдущие SetCookient Функция для обновления состояния компонента.

Держись, есть что-то не так …

В коде выше есть GOTCHA. Этот эффект будет работать каждый раз, по сути, вытесняя любые новые приращения нашему значению cookie из нашего оригинала Добавить кнопку Cookie.

Чтобы обойти это, мы можем установить 2-й аргумент для Useffect Функция, которая позволяет нам дать реагировать знать, когда запустить его снова. В нашем примере выше установка того, что 2-й аргумент для пустого массива заставит его работать только один раз.

const MyCookies = ({cookieType = 'chocolate'}) => {
  const [ cookies, setCookieCount ] = useState(0);
  useEffect(() => {
    getCookieCount().then((count) => {
      setCookieCount(count);
    })
  }, [ cookieType ]);
  ...
};

Однако в большинстве случаев вы захотите пройти массив зависимостей, которые, когда менялись, приведут Useffect стрелять снова. Скажите, например, вы получите подсчет определенного типа Cookie и хотите снова получить счет, если этот тип изменения.

import BasketContext from 'context';

const Basket = ({children}) => {
  return (
    
      

My Basket

{ children }
); } // MyCookies.js const MyCookies = ({cookieType = 'chocolate'}) => { const basketItems = useContext(BasketContext); ... };

В приведенном выше коде, в любое время наше опору Cookieteype Изменения, реагирующие знают, что мы зависим от этого для нашего эффекта, и будем перезапущен этот эффект.

Пытаясь использовать контекст

Я не собираюсь Зайдите в детали контекста Rection API Как это немного не имеет возможности. Однако, если вы знакомы с этим, упреждающий текст Крючок позволяет легко использовать свой контекст из вашего функционального компонента. В приведенном выше коде, учитывая наш уже созданный контекст, мы можем немедленно «использовать» указанное контекст и собирать значения, переданные в наш поставщик контекста.

import BasketContext from 'context';

const Basket = ({children}) => {
  return (
    
      

My Basket

{ children }
); } // MyCookies.js const MyCookies = ({cookieType = 'chocolate'}) => { const basketItems = useContext(BasketContext); ... };

Очистка ваших крючков

Что делает крюки еще более мощными, сочетается и абстрагирует их высушить ваш код более чистым способом. Как быстрый последний пример, мы можем взять наши примеры файлов cookie Уместите и Useffect и абстрагировать их в себе Используйте [Имя] Функция, эффективно Создание пользовательского крючка Отказ

// useCookies.js
function useCookies(initialCookieCount) {

  const [ cookies, setCookieCount ] = useState(initialCookieCount);

    useEffect(() => {
    getCookieCount().then((count) => {
      setCookieCount(count);
    })
  }, []);

  function addCookie() {
    setCookieCount(cookies + 1);
    console.log('?');
  }

  function removeCookie() {
    setCookieCount(cookies - 1);
    console.log('?');
  }

  return {
    cookies,
    addCookie,
    removeCookie
  }
};

// MyCookies.js
const MyCookies = () => {
  const { cookies, addCookie, removeCookie } = useCookies(0);
  ...
};

Мы благополучно смогли аннотация нашу государственную логику и все же использовать его, чтобы управлять нашими печеньями.

Больше больше, чтобы зацепить

Это основные 3 крючка реагируют нам, но Есть еще много, они предоставляют из коробки Все с тем же основными принципами, которые реагированная документация делает хорошую работу по объяснению.

Первоначально опубликовано https://www.colbyfayock.com/2019/04/destructuring-the-fundamentals-of-react-hooks .

Оригинал: “https://www.freecodecamp.org/news/how-to-destructure-the-fundamentals-of-react-hooks-d13ff6ea6871/”