#reactjs
Вопрос:
Это может быть простой вопрос, но я не мог понять, как загрузить внешний скрипт, который находится в той же папке, используя относительный путь. Ниже приведен снимок папки src.
Здесь я пытаюсь импортировать draggable.js внутри DesignScreen.js компоненты. Здесь определены компоненты.
import React from 'react'
import './decorate.css'
const DesignsScreen = () => {
React.useEffect(() => {
const LoadExternalScript = () => {
const externalScript = document.createElement('script')
// externalScript.onerror = loadError;
externalScript.id = 'external'
externalScript.async = true
externalScript.type = 'text/javascript'
externalScript.setAttribute('crossorigin', 'anonymous')
document.body.appendChild(externalScript)
externalScript.src = './draggable.js'
}
LoadExternalScript()
}, [])
return (
<>
<div
id='draggable'
draggable='true'
style={{ backgroundPosition: '0px 0px' }}
></div>
</>
)
}
export default DesignsScreen
Я хочу загрузить draggable.js без использования полного пути, как это: ExternalScript.src = ‘./draggable.js». Я безрезультатно поискал решение в Интернете. Итак, я пришел сюда в поисках ответа.
Ответ №1:
Если вы создадите свой проект с CRA
помощью , вы можете просто добавить свой внешний скрипт public/index.html
.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<-- Add your script here -->
<title>React App</title>
</head>
Комментарии:
1. Причина LoadExternalScript = () внутри крючков useEffect заключается в том, что если я импортирую draggable.js в index.html затем документ. querySelector(‘#перетаскиваемый’) возвращает значение null.
Ответ №2:
ExternalScript.src = ‘/src/screens/draggable.js » как только вы попробуете это в нашем проекте, мы импортируем файлы сценариев, подобные этому.
Комментарии:
1. это не сработало таким образом. Я проверяю элемент загруженного скрипта <идентификатор скрипта=»внешний» асинхронный=»» тип=»текст/javascript» crossorigin=»анонимный» src=»/src/screens/ProductBase/draggable.js»><идентификатор сценария=»внешний» асинхронный=»» тип=»текст/javascript» кроссоригин=»анонимный» src=»/src/screens/ProductBase/draggable.js»></скрипт>. Он пуст.
Ответ №3:
Помните, что если вы работаете с внешними сценариями, то ./ в вашем ExternalScript.src является общедоступным каталогом. После создания приложения React больше не будет папки src, только общая папка.
src/screens/ProductBase/DesignsScreen.js файл:
let externalScript = document.createElement('script');
externalScript.src = './draggable.js';
externalScript.async = true;
document.body.appendChild(externalScript);
public/draggable.js файл:
window.addEventListener('load', () => console.log("Hello World!"));
Я протестировал этот пример кода, и он работает. Когда браузер загружает страницу, консоль регистрирует «Привет, мир!».