ReactJS で生の HTML をレンダリングする

Oluwafisayo Oluwatayo 2023年1月30日
  1. オンライン HTML から JSX へのコンバーター
  2. 組み込みの ReactDOM.render() メソッドを使用する
  3. dangerouslySetInnerHTML メソッドを使用する
  4. まとめ
ReactJS で生の HTML をレンダリングする

React フレームワークの多様性と柔軟性は強調しすぎることはありません。ユーザーが React 内で HTML コードをレンダリングできる機能のおかげで、開発者として React を採用する前に、React を深く学ぶ必要はありません。

HTML で多くのコードを記述し、それを React に取り込むための最速の方法を探している人のために、このチュートリアルではこれを行うためのさまざまな方法を紹介します。

オンライン HTML から JSX へのコンバーター

この方法は、映画や曲のダウンロードが困難だったときに、オンラインメディア変換 Web サイトを最初に発見したときの思い出をもたらします。

Web サイト("https://transform.tools/html-to-jsx")は、純粋な HTML コードを JSX(JavaScript Syntax Extension)に変換するため、react フレームワーク内で使用できるようになります。

コードスニペット-App.js

import logo from './logo.svg';
import './App.css';

function App() {
  return (
  <div className="App">
      <>
  <meta charSet="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" type="text/css" href="goog.css" />
  <title>Google</title>
  <header>
    <nav className="navi">
      <div id="left">
        <ul>
          <li>
            <a href="#">About</a>
          </li>
          <li>
            <a href="#">Stores</a>
          </li>
        </ul>
      </div>
      <div id="right">
        <ul>
          <li>
            <a href="#">Gmail</a>
          </li>
          <li>
            <a href="#">Images</a>
          </li>
          <li>
            <a href="#">Social</a>
          </li>
          <li>
            <button type="submit">Sign In</button>
          </li>
        </ul>
      </div>
    </nav>
  </header>
  <main id="content">
    <div className="google-logo">
      <img
        src="googlelogo_color_272x92dp.png"
        alt="google-logo"
        id="logo"
        width={272}
        height={92}
      />
    </div>
    <div id="search-bar">
      <input type="text" placeholder="Search or Type a URL" />
    </div>
    <div id="buttons">
      <button type="submit">Google Search</button>
      <button type="submit">I'm Feeling Lucky</button>
    </div>
  </main>
  <footer>
    <nav className="footer">
      <div id="left-foot">
        <ul>
          <li>
            <a href="#">Advertising</a>
          </li>
          <li>
            <a href="#">Business</a>
          </li>
          <li>
            <a href="#">How Search Works</a>
          </li>
        </ul>
      </div>
      <div id="right-foot">
        <ul>
          <li>
            <a href="#">Privacy</a>
          </li>
          <li>
            <a href="#">Terms</a>
          </li>
          <li>
            <a href="#">Settings</a>
          </li>
        </ul>
      </div>
    </nav>
  </footer>
</>
    </div>
  );
}
export default App;

.App div 内でコードをラップし、複数の要素が含まれているため、フラグメント内でコードをラップします。

オンライン HTML から JSX へのコンバーター

組み込みの ReactDOM.render() メソッドを使用する

このメソッドを使用すると、HTML コードを最も純粋な形式で使用できます。ReactDOm.render() を使用すると、指定した HTML コードを表示できます。

また、新しい React アプリを正常に作成すると、ReactDOM.render() がプレインストールされるため、追加の依存関係は必要ありません。ReactDOM.remder() は、軽い反応アプリを作成するための理想的なメソッドです。

react プロジェクトの index.js ファイル内に移動し、const myelement を宣言します。

コードスニペット-index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const myelement = (
  <>
<title>Google</title>
<body>
    <header>
        <nav class="navi">
            <div id="left">
                <ul>
                    <li><a href="#">About</a></li>
                    <li><a href="#">Stores</a></li>
                </ul>
            </div>

            <div id="right">
                <ul>
                    <li><a href="#">Gmail</a></li>
                    <li><a href="#">Images</a></li>
                    <li><a href="#">Social</a></li>
                    <li><button type="submit">Sign In</button></li>
                </ul>
            </div>
        </nav>
    </header>

    <main id="content">
        <div class="google-logo">
            <img src="googlelogo_color_272x92dp.png" alt="google-logo" id="logo" height="92" width="272"/>
        </div>

        <div id="search-bar">
            <input type="text" placeholder="Search or Type a URL"/>
        </div>

        <div id="buttons">
            <button type="submit">Google Search</button>
            <button type="submit">I'm Feeling Lucky</button>
        </div>
    </main>

    <footer>
        <nav class="foot">
            <div id="left-foot">
                <ul>
                    <li><a href="#">Advertising</a></li>
                    <li><a href="#">Business</a></li>
                    <li><a href="#">How Search Works</a></li>
                </ul>
            </div>

            <div id="right-foot">
                <ul>
                    <li><a href="#">Privacy</a></li>
                    <li><a href="#">Terms</a></li>
                    <li><a href="#">Settings</a></li>
                </ul>
            </div>
        </nav>
    </footer>
</body>
</>
);
ReactDOM.render(myelement, document.getElementById('root'));

要素を宣言した後、以下に移動して、ReactDOM.render() 内に要素を追加し、コードをフラグメントタグでラップしていることを確認します。

組み込みの ReactDOM.render()メソッドを使用する

dangerouslySetInnerHTML メソッドを使用する

これは、react フレームワークで HTML を未加工の状態でレンダリングするための最も一般的な方法です。このメソッドは、このメソッドのセキュリティの脆弱性をユーザーに警告します。

dangerouslySetInnerHTML メソッドを使用すると、攻撃者はフォーム送信 Web サイトの検索から送信されたデータ内に悪意のあるスクリプトを保存できます。

コードスニペット-App.js

import logo from './logo.svg';
import './App.css';

const App = () => {
  const data =
    <body>
     <header>
        <nav class="navi">
            <div id="left">
                <ul>
                    <li><a href="#">About</a></li>
                    <li><a href="#">Stores</a></li>
                </ul>
            </div>
            <div id="right">
                <ul>
                    <li><a href="#">Gmail</a></li>
                    <li><a href="#">Images</a></li>
                    <li><a href="#">Social</a></li>
                    <li><button type="submit">Sign In</button></li>
                </ul>
            </div>
        </nav>
    </header>
    <main id="content">
        <div class="google-logo">
            <img src="googlelogo_color_272x92dp.png" alt="google-logo" id="logo" height="92" width="272">
        </div>
        <div id="search-bar">
            <input type="text" placeholder="Search or Type a URL">
        </div>
        <div id="buttons">
            <button type="submit">Google Search</button>
            <button type="submit">I'm Feeling Lucky</button>
        </div>
    </main>
    <footer>
        <nav class="foot">
            <div id="left-foot">
                <ul>
                    <li><a href="#">Advertising</a></li>
                    <li><a href="#">Business</a></li>
                    <li><a href="#">How Search Works</a></li>
                </ul>
            </div>
            <div id="right-foot">
                <ul>
                    <li><a href="#">Privacy</a></li>
                    <li><a href="#">Terms</a></li>
                    <li><a href="#">Settings</a></li>
                </ul>
            </div>
        </nav>
    </footer>
</body>
;
  return (
    <div
      dangerouslySetInnerHTML={{ __html: data }}
    />
  );
}
export default App;

最初に const を使用してコンポーネントを宣言し、次に HTML コードをバッククォートでラップします。次に、dangerouslySetInnerHTML を宣言し、data コンポーネントを中括弧で囲みます。

危険な SetInnerHTML メソッドを使用する

まとめ

これらの方法は、厳密なコースを経ることなく、React に慣れるための刺激的な道を作ります。しかし、そのようなアプローチの欠点は、伸縮性のあるコードが生成されることです。これは、そもそも反応フレームワークを作成する本当の理由を何とか打ち負かします。

Oluwafisayo Oluwatayo avatar Oluwafisayo Oluwatayo avatar

Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.

LinkedIn

関連記事 - React Render