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 内でコードをラップし、複数の要素が含まれているため、フラグメント内でコードをラップします。
組み込みの 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()
内に要素を追加し、コードをフラグメントタグでラップしていることを確認します。
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
コンポーネントを中括弧で囲みます。
まとめ
これらの方法は、厳密なコースを経ることなく、React に慣れるための刺激的な道を作ります。しかし、そのようなアプローチの欠点は、伸縮性のあるコードが生成されることです。これは、そもそも反応フレームワークを作成する本当の理由を何とか打ち負かします。
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