React: Триггерная тревога от крючков

Созданный на 14 февр. 2019  ·  3Комментарии  ·  Источник: facebook/react

Вы хотите запросить функцию или сообщить об ошибке ?

Вопрос. Это также может быть связано с # 14563.

Как вызвать тревогу с крючка?

Почему возник вопрос?

Этот вопрос возник во время использования нами react-i18next . Недавнее обновление react-i18next предоставило крючок useTranslation который позволяет получать текущие переводы, а также запускает загрузку еще не загруженных пространств имен переводов (что-то вроде разделения кода).

Чтобы обработать случай, когда переводы еще не загружены, крючок useTranslation выдает обещание вызвать Suspense , что на самом деле очень удобно, потому что оно полностью интегрируется с существующими функциями реагирования!

Однако, если вы используете больше хуков после вызова useTranslation -hook, эти другие хуки не будут отображаться, если useTranslation бросает обещание. После того, как переводы загрузятся, крючок больше не будет бросать и отреагирует, и вы получите большое красное предупреждение о том, что количество крючков изменилось.

Пример

const Component = () => {
  const [t] = useTranslation('translationnamespace');
  const [count, setCount] = useState(0);

  return (
    <div onClick={() => setCount(count + 1)}>
      {t('The count is:')} {count}
    </div>
  );
};

Если translationnamespace еще не загружен, useTranslation выбросит, в результате чего useState не будет отображаться. После загрузки translationnamespace useTranslation больше не будет генерировать, что вызывает отображение useState , вызывающее предупреждение.

Общий случай

Таким образом, этот вопрос не относится только к response-i18next, но вместо этого применяется ко всем хукам, которые хотят вызвать неопределенность. Как мы это сделаем и как это будет интегрировано с текущими «Правилами хуков», которые гласят, что хуки не должны отображаться условно?

Hooks Suspense Bug

Самый полезный комментарий

Думаю, мы исправили это в 16.8.2. Если нет, откройте новый с футляром для воспроизведения.

Все 3 Комментарий

Похоже на ошибку, что ошибка возникает в случае приостановки. Афайк, это не было намеренно.

Хорошо, полезно знать!

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

Думаю, мы исправили это в 16.8.2. Если нет, откройте новый с футляром для воспроизведения.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги