Комментарии 4
Не хватает выгрузки скрипта (хотя бы удалить его из DOM) при отмонтировании компонента через cleanup функцию эффекта (не знаю как это работает с useAsync). Если компонент использующий скрипт отмонтируется и примонтируется (или изменится url), скрипт добавится дважды, трижды и т д. Это может быть нежелательное поведение. Как минимум утечка ресурсов, как максимум экземпляры скрипта могут конфликтовать.
Альтернатива может быть завести глобальную Map результатов загрузки скриптов по url и если скрипт уже грузили раньше, не грузить его второй раз, а возвращать кешированный результат. Но надо обработать гонку, если useScript вызван повторно до окончания загрузки.
Для меня кажется это странным грузить что то еще таким образом. Почему не динамический импорт? Бандл не уведичится, а просто чанк загрузится. Почти все либы уже поддерживают стандарт es.
У меня такой хук называется useSdk =)
а по загрузку несколько скриптов там просто так делать
useSdk(id, url)
const exists = document.getElementById(id);
if (exists) return resolve();
React Custom Hook: useScript