Когда называются пользовательские React Hooks? - PullRequest
0 голосов
/ 06 февраля 2020

Я прочитал документацию по пользовательским хукам React , и меня немного смущает, как / когда они вызываются.

  • Вызываются ли они при каждом обновлении вызывающей функции / компонента, например useEffect, то есть при монтировании компонента выполняется рендеринг и т. Д. c?
  • Пример, который они приводят, похоже, подразумевает, что пользовательский хук вызывается каждый раз, когда изменяется параметр - их пример: *

enter image description here

и они говорят

Если мы выберем другого друга и обновим переменную состояния получателя, наш хук useFriendStatus отменит подписку на ранее выбранного друга и подпишется на статус нового выбранного.

Так что это что-то вроде (или точно так же) параметров, которые вы передаете в массиве, который является вторым параметром useEffect, то есть, если какой-либо из параметров, передаваемых в ваш пользовательский хук, изменится, то хук снова вызывается?

  • Наконец - и это может быть глупый вопрос, простите меня - любое состояние, которое существует внутри крючка, исчезает сразу же после его возвращения, как нормальная функция (которая, конечно, это)? Я понимаю, что любое состояние, созданное в пользовательском хуке с useState, является локальным для вызывающего компонента, то есть локально для пользовательского хука, но если вы вернули из хука функцию set, созданную внутри хука, было бы что-нибудь установить? Подойдет ли закрытие? (Я не уверен, почему вы это сделаете, но мне просто любопытно, поскольку смысл эффектов, кажется, снимает побочные эффекты, и мне было интересно, можете ли вы сделать это с помощью пользовательских хуков, если по какой-то причине вы выбрал).

    function useKludge(something) {
      const [isSomething, setIsSomething] = useState(something);
    
      return setIsSomething;
    }
    

Спасибо за любую помощь!

* (Я вставил изображение, потому что SO не позволяет мне правильно форматировать код для какая-то причина)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...