Визуализировать тег сценария в компоненте React - PullRequest
0 голосов
/ 16 декабря 2018

Я создаю приложение React, и мне нужно запустить скрипт Javascript только в одном компоненте, ссылаясь на один из div.

Я знаю, что есть некоторые библиотеки длясделай так, но мне интересно, есть ли более прямой способ сделать это.Прямо сейчас я делаю это:

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  render() {
    return (
      <div>
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
        <script src="js/myScript.js" />
      </div>
    );
  }
}

Но ничего не происходит.Скрипт хранится в public/js/myScript.js.
Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Я наконец решил это, добавив функцию componentDidMount перед рендерингом компонента.Как это:

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  componentDidMount() {
    const script = document.createElement("script");

    script.src = "js/myScript.js";
    script.async = true;

    document.body.appendChild(script);
  }

  render() {
    return (
      <div>
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
      </div>
    );
  }
}

Если у кого-то есть лучшее решение, пожалуйста, не стесняйтесь поделиться им.Я буду в курсе дальнейших рекомендаций.

0 голосов
/ 26 июля 2019

export default class MyComponent extends Component {
    componentDidMount() {
        const script = document.createElement("script");
        script.innerHTML = "window.onload = function() {\n" +
            ...
            "}"
        script.async = true;
        document.body.appendChild(script);
    }

    render() {
        return (
            <div>
            </div>
        );
    }
}
0 голосов
/ 16 декабря 2018

Используя dangerouslySetInnerHTML, вы можете добавить любой допустимый html-код для ваших элементов.

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  render() {
    return (
      <div dangerouslySetInnerHTML="<script src='js/myScript.js' />" >
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
      </div>
    );
  }
}

Следует отметить, что, как следует из названия атрибута, его использование настоятельно не рекомендуется .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...