Внешний Javascript не работает в react.js

Я создаю приложение для реагирования, используя create-react-app. У меня есть несколько внешних библиотек javascript для дизайна шаблонов в основном index.html.

 <script src = "%PUBLIC_URL%/js/jquery-2.2.4.min.js"></script>
 <script src = "%PUBLIC_URL%/js/common_scripts.js"></script>
 <script src = "%PUBLIC_URL%/js/main.js"></script>
 <script src = "%PUBLIC_URL%/js/owl.carousel.js"></script>

Эти файлы JS работают на первой странице при запуске приложения. Но эти библиотеки не работают при перенаправлении на другую страницу с первой страницы. Насколько я понимаю, эти файлы отображаются, но их functions, variables, and methods недоступны при изменении маршрута. Для маршрутизации использую react-router-dom v4.

Я погуглил и нашел решение - Для рендеринга JS-библиотек методом ComponentDidMount()

ComponentDidMount(){
    loadjs('./js/main.js', function(){
    loadjs('./js/common_scripts.js)
    });
  }

Но даже это решение не работает. Пожалуйста, помогите решить эту проблему.

Спасибо

Я столкнулся с той же проблемой. Вы получили какое-нибудь решение?

Azad Hussain 08.04.2019 10:49

Я использовал объект window, чтобы использовать функции jquery и события import $ from 'jquery'; в основном index.js, а затем получить доступ к любым событиям jquery, таким как componentDidUpdate(nextProps, nextState) { window.$('.hero_single').addClass('start_bg_zoom'); }

Saurabh Sharma 08.04.2019 15:39

спасибо за ответ, но я новичок в разработке интерфейса, поэтому я не понял, что вы сказали, у меня есть несколько внешних файлов js, как в вашем случае, таких как jquery, bootstrap, owl.carousel, хороший выбор и настраиваемый файл main. js, который включает в себя всю инициализацию и т. д. Как я могу заставить всю страницу работать нормально

Azad Hussain 09.04.2019 10:16

@AzadHussain, можешь ли ты найти исправление? Я столкнулся с той же проблемой

Mitesh K 18.06.2021 07:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
6 939
6

Ответы 6

Вы используете componentWillMount() вместо componentDidMount().

Я думаю, что в этом проблема.

Вы можете установить эти js-файлы в объекте окна, а затем вы можете получить к нему доступ с помощью window.your_name для объекта ..

Вы должны установить это в индексном файле

Попробуйте использовать import() внутри componentDidMount()

Import () не требует объяснений - он просто импортирует файлы JavaScript.

import('your_URL')

Привет, я пробовал, но он дает ошибку vriables, например Line 3: 'WOW' is not defined no-undef Line 3: 'Switchery' is not defined no-undef Line 3: Unexpected use of 'location' no-restricted-globals Line 3: Unexpected use of 'location' no-restricted-globals

Saurabh Sharma 07.09.2018 11:36

похоже, вы пытаетесь импортировать файл миниатюрной версии JQuery. Используйте JQuery из NPM ссылка на сайт

Bharath 07.09.2018 12:07

Я использую jQuery из NPM для запроса Ajax.

Saurabh Sharma 07.09.2018 12:49

Так что избегайте импорта jquery. попробуйте динамически импортировать остальные файлы.

Bharath 07.09.2018 14:45

Попробуйте вызвать событие, используя объект окна. ссылка <a href = "https://github.com/facebook/create-react-app/issues/3007#issuecomment-357863643">Link</a>

Вот как я импортирую JQuery в свое приложение для создания реакции

JQuery:

  1. первый запуск npm install jquery
  2. index.js

import * as $ from 'jquery'

window.jQuery = window.$ = $

см .: http://blog.oddicles.org/create-react-app-importing-bootstrap-jquery-cleanly-node-js/

В качестве альтернативы вы можете прикрепить сценарии к объекту окна, а затем вызывать их по мере необходимости:

Попробуйте выполнить следующие шаги:

включая ссылку на внешний файл js в вашем /public/index.html использовать внешнюю библиотеку с окном префикса. например, JQuery.

поместите следующую строку в свой /public/index.html

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>`

используйте его в своем проекте:

window.$("#btn1").click(function(){
    alert("Text: " + $("#test").text());
});

`

Смотрите это для более подробной информации:

https://github.com/facebook/create-react-app/issues/3007

const loadScript = (src) => {
  return new Promise(function (resolve, reject) {
    var script = document.createElement('script')
    script.src = src
    script.addEventListener('load', function () {
      resolve()
    })
    script.addEventListener('error', function (e) {
      reject(e)
    })
    document.body.appendChild(script)
    document.body.removeChild(script)
  })
}

 useEffect(() => {
    loadScript(`${process.env.PUBLIC_URL}/js/plugin.min.js`)
    setTimeout(() => {
      setTimeout(() => {
        setLoading(false)
      }, 500)
      loadScript(`${process.env.PUBLIC_URL}/js/main.js`)
    }, 200)
  }, [])


Другие вопросы по теме