Почему эти функции работают по-разному?

Попробуйте это -

$(document).on( 'click', '.click-activity', function () { ... });
2
задан Pablo Neme 28 March 2019 в 01:12
поделиться

2 ответа

В вашем первом примере unmounted всегда будет false после каждого рендера.

Вот правильный путь без использования глобального экземпляра:

function Component() {
  const [emailSent, setEmailSent] = useState(false);
  const unmounted = useRef(false);

  async function handleSendEmail(formValues) {
    try {
      await AuthApi.sendRecoverAccountEmail('123');
      !unmounted.current && setEmailSent(true);
    } catch (err) {
      !unmounted.current && setIsSendingEmail(false);
    }
  }

  useEffect(() => {
    return () => {
      unmounted.current = true;
    };
  }, []);
}
0
ответ дан Ha Ja 28 March 2019 в 01:12
поделиться

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

В вашем первом примере ваш несмонтированный var является частью свойств вашего компонента, а во втором примере он просто выбирается как часть закрытия javascript.

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

Я думаю, что если вы добавите unmounts в список зависимостей, это может сработать? Обычно я использую реагирование из другого фреймворка в Clojurescript, так что я не совсем знаком с семантикой основного интерфейса javascript, но по крайней мере это было бы причиной того, почему вы получаете предупреждение для первого примера.

В вашем первом примере, что произойдет, если вы измените последнюю часть на следующую?

useEffect(() => {
  return () => {
   unmounted = true;
  };
 }, [unmounted]);
}

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

0
ответ дан Nick 28 March 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: