Как добавить/смешать ванильный Javascript с ReactJS

Я новичок в React. На данный момент мне удается обновить свой простой веб-сайт со стандартного HTML, CSS, JS на React, SASS, JSX и так далее. У меня проблема в том, что есть тег canvas, где я запускаю анимацию, созданную в Vanilla Javascript с использованием библиотеки Paperjs, но я не знаю, как реализовать мою текущую JS-анимацию в моем проекте React.

Это то, что у меня есть в моем теге body:

<canvas id='paperjs-canvas' resize></canvas>
<script src = "js/libs/paper-full.min.js"></script>
<script src = "js/jellies/jelly.min.js"></script>
<script src = "js/jellies/tentacle.min.js"></script>
<script src = "js/jellies/paper-jellies.min.js"></script>

Это просто простая фоновая анимация, никакого взаимодействия с DOM-элементами нет.

Меня интересует, можно ли будет реализовать мой текущий код в React как есть, и если да, то как?

Любая помощь будет высоко ценится.

вы хотите отображать <canvas> внутри компонента реакции?

stackoverflow 30.05.2019 21:40

@BarbuBarbu да, да, моя идея состоит в том, чтобы разные анимации JS отображались на теге холста, чтобы я мог позволить пользователю выбирать, какую анимацию просматривать/запускать

Ricardo Sanchez 30.05.2019 22:39

тогда это будет немного сложнее сделать, вам придется обернуть всю логику внутри компонента, который был смонтирован, и там, когда ваша анимация должна измениться, вам придется динамически загружать все библиотеки, связанные с js, и связывать их к элементу <canvas> ref... не уверен, насколько вы поняли, но я надеюсь, что дал вам идею

stackoverflow 31.05.2019 09:20
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
3 958
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

React должен полностью контролировать свою ветку DOM (обычно <div id = "root"/> под <body>).

Пока вы помещаете <canvas /> вне ветки DOM React, у вас не будет с этим проблем.

Пример:

<html>
  <head>...</head>
  <body>
    <div id = "root"></div> <!-- React branch -->
    <canvas id = "paperjs-canvas" resize></canvas> <!-- Here you are in control -->
    ...
  </body>
</html>

Нашел хорошее решение, используя github.com/nfl/react-helmethttps://github.com/nfl/react-helm‌​et

Ricardo Sanchez 08.06.2019 18:35

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