#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. Ты уверен. будем делать