ReactJS добавляет сторонний плагин Javascript

#javascript #reactjs

Вопрос:

Я пытаюсь использовать тип плагина Javascript для reactjs(версия 17.2). Несмотря на то, что у него есть npm, я пытаюсь использовать обычную версию vanilla js.
Я не могу этого понять.

Я использовал следующий крючок, чтобы ввести скрипт в тело

 import { useEffect } from 'react'; const useScript = resourceUrl=gt; {    useEffect(() =gt; {  const script = document.createElement('script');  script.src = resourceUrl;  script.async = true;  console.log(script)  document.body.appendChild(script); return () =gt; {  document.body.removeChild(script);  }  }, [resourceUrl]); }; export default useScript;  

В компоненте я использую следующий код

 import React, {useEffect, useRef} from 'react' import useScript from '../../Hooks/useScript'  const TypeText = () =gt; {   useScript('vendor/typeTextScript.js')  // useScript('https://unpkg.com/typeit@8.0.6/dist/index.umd.js')  const typeTrigger = useRef()      useEffect(()=gt; {    setTimeout(() =gt; {  new TypeIt(typeTrigger.current, {  strings: "This is my string!",  speed: 75,  loop: true,  }).go();  }, 100);    },[])     return (  lt;gt;  lt;h1gt;This is a TypeText componentlt;/h1gt;  lt;p ref={typeTrigger}gt;lt;/pgt;     lt;/gt;  ) }  export default TypeText  

Я получаю следующую ошибку: TypeIt не определен. Вы не могли бы мне помочь?

Ответ №1:

Я не знаю, почему вы не хотите использовать npm этот пакет для установки, но вот что вам нужно сделать:

добавьте type свойство в свой script браузер, чтобы он знал, как с ним обращаться

 const useScript = (resourceUrl: string) =gt; {  useEffect(() =gt; {  const script = document.createElement("script");  script.src = resourceUrl;  script.async = true;  script.type = "text/javascript"; // you need to add this line  console.log(script);  document.body.appendChild(script);  return () =gt; {  document.body.removeChild(script);  };  }, [resourceUrl]); };  

Комментарии:

1. Добавлен script.type . Тем не менее ошибка сохраняется. Несмотря на то, что файл библиотеки загружен, инициализация не запускается. Я не использую NPM, потому что может возникнуть ситуация, когда нам нужно использовать определенный плагин JS, но для этого нет NPM.

2. Я выяснил, что если мы удалим следующую конфигурацию "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, из файла package.json, приведенный выше код будет работать. Проблема возникает из-за конфигурации ESLint. Я не знаю, почему

3. Выяснил проблему. Поскольку eslint уже настроен, нам нужно прокомментировать раздел инициализации, как будто setTimeout(() =gt; { /*global TypeIt*/ new TypeIt(typeTrigger.current, {strings: "This is my string!",speed: 75,loop: true, }).go();}, 100); нам нужно прокомментировать его как /*глобальную некоторую функцию, a*/

4. @RejinJose Это приятно, если ответ был полезен, попробуйте проголосовать и принять ответ 😉

5. Ты уверен. будем делать