Как отобразить статическую html-страницу в ReactJS?

Я пытаюсь отобразить html-страницу в реакции. Я пробовал несколько решений, но все равно получаю сообщение об ошибке. Да, я знаю, что есть много вопросов, похожих на этот, но ни одно из этих решений не сработало для меня. Я использую reactjs в качестве внешнего интерфейса и просто пытаюсь показать статическую html-страницу.

html файл ниже:

<!DOCTYPE html>

<html>
  <head>
    <title>Ably WebRTC Video call Demo</title>

    <link
      rel = "stylesheet"
      href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"
    />
  </head>

  <body>
    <script src = "https://cdn.temasys.io/adapterjs/0.15.x/adapter.min.js"></script>

    <script src = "https://cdn.temasys.io/adapterjs/0.15.x/adapter.screenshare.js"></script>

    <script src = "https://cdn.ably.io/lib/ably.min-1.js"></script>

    <script src = "https://cdnjs.cloudflare.com/ajax/libs/simple-peer/9.1.2/simplepeer.min.js"></script>

    <script src = "ably-screenshare.js"></script>

    <script src = "connection-helper.js"></script>

    <div class = "container-fluid" style = "margin-top: 5em;">
      <div class = "container" id = "join">
        <h4 id = "online">Users online (0)</h4>

        <ul id = "memberList"></ul>
      </div>

      <div class = "container" id = "call" style = "display:none;">
        <video width = "320" height = "240" id = "local" controls></video>

        <video width = "320" height = "240" id = "remote" controls></video>

        <button class = "btn btn-xs btn-danger" onclick = "handleEndCall()">
          End call
        </button>
      </div>
    </div>
  </body>

  <style>
    small {
      border-bottom: 2px solid black;
    }

    li {
      list-style: none;
    }
  </style>
</html>

и решение, которое я пробовал,

import React, { Component } from "react";
var __html = require("./screen.html");
var template = { __html: __html };

class ScreenShare extends Component {
  render() {
    return (
      <div className = "screen-share">
        <span dangerouslySetInnerHTML = {template} />
      </div>
    );
  }
}
export default ScreenShare;

Даже используя приведенное выше решение, я получаю эту ошибку

./src/components/screenShare/screen.html
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type.
| <!DOCTYPE html>
| 
| <html>

что-то не так, что я делаю? Я знаю, чтоопасноSetInnerHTML-это не лучший способ решить проблему, но я попытался изменить приведенный выше HTML-код на реагирующий компонент, и это не помогло. Поэтому я попытался опасно SetInnerHTML преобразовать его, но он все еще дает ошибку.

Дублирование этого: stackoverflow.com/questions/37818401/…

blaz 29.05.2019 10:37
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
5
2
16 386
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

По умолчанию импорт HTML-файла с помощью React не будет работать. Учитывая ваш вариант использования и маршрут, по которому вы хотите пойти, лучше всего будет преобразовать HTML-страницу в файл js, а затем экспортировать, например:

файл html.js

module.exports = `<!DOCTYPE html>

<html>
  <head>
    <title>Ably WebRTC Video call Demo</title>

    <link
      rel = "stylesheet"
      href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"
    />
  </head>

  <body>
    <script src = "https://cdn.temasys.io/adapterjs/0.15.x/adapter.min.js"></script>

    <script src = "https://cdn.temasys.io/adapterjs/0.15.x/adapter.screenshare.js"></script>

    <script src = "https://cdn.ably.io/lib/ably.min-1.js"></script>

    <script src = "https://cdnjs.cloudflare.com/ajax/libs/simple-peer/9.1.2/simplepeer.min.js"></script>

    <script src = "ably-screenshare.js"></script>

    <script src = "connection-helper.js"></script>

    <div class = "container-fluid" style = "margin-top: 5em;">
      <div class = "container" id = "join">
        <h4 id = "online">Users online (0)</h4>

        <ul id = "memberList"></ul>
      </div>

      <div class = "container" id = "call" style = "display:none;">
        <video width = "320" height = "240" id = "local" controls></video>

        <video width = "320" height = "240" id = "remote" controls></video>

        <button class = "btn btn-xs btn-danger" onclick = "handleEndCall()">
          End call
        </button>
      </div>
    </div>
  </body>

  <style>
    small {
      border-bottom: 2px solid black;
    }

    li {
      list-style: none;
    }
  </style>
</html>`;

Здесь обратите внимание на module.exports, а также на используемую строку шаблона, чтобы вы могли вызвать его на своей странице реакции следующим образом:

import React, { Component } from "react";
var __html = require('./index.html.js');
var template = { __html: __html };

class ScreenShare extends Component {
  render() {
    return (
      <div className = "screen-share">
        <span dangerouslySetInnerHTML = {template} />
      </div>
    );
  }
}
export default ScreenShare;

изначально он позволял скомпилировать проект, если я удалю теги html и head. Но он по-прежнему не анализирует код, и вся страница рушится.

Naeem Faheem 29.05.2019 20:01

Этот ответ не на 100% верен. Поскольку он использует опасно SetInnerHTML, он не запускает код внутри тегов скрипта. Чтобы запустить код внутри тегов sciprt, я использую компонент реактивного шлема.

Capan 08.09.2020 17:00

Поместите свой статический файл в общую папку, затем в разделе маршрутизации поместите это:

<Route exact path = "/">
   <Redirect push to = {"/home.html"} />
</Route> 

Я проверил, и это работает. Вы можете добавить перезагрузку или обновление маршрута.

nntona 17.03.2021 16:22

Вы можете преобразовать свой статический HTML-файл в строку и передать его в свой div с помощью тегаhazardlySetInnerHTML. Затем, если у вас снова возникнет проблема, в этом случае ваш HTML-файл может иметь поле, которое не определено или неверно. Проверьте свой HTML и повторите попытку.

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 11.10.2021 11:22

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