JSX の原則を理解するには、まず JavaScript オブジェクトを使用して DOM 要素の構造を表現する方法を理解する必要があります。
以下の DOM 構造を見てください:
<div class='app' id='appRoot'> <h1 class='title'>欢迎进入React的世界</h1> <p> React.js 是一个帮助你构建页面 UI 的库 </p> </div>
JavaScript オブジェクトを使用して、上記の HTML 内のすべての情報を表すことができます:
{ tag: 'p', attrs: { className: 'app', id: 'appRoot'}, children: [ { tag: 'h1', attrs: { className: 'title' }, children: ['欢迎进入React的世界'] }, { tag: 'p', attrs: null, children: ['React.js 是一个构建页面 UI 的库'] } ] }
しかし、これは JavaScript で記述するには長すぎます。構造も明確ではありませんが、HTML を使用すると非常に便利です。
そこで、React.js は JavaScript の構文を拡張し、JavaScript コードで HTML タグ構造に似た構文を記述できるようにし、より便利になりました。コンパイル プロセスでは、HTML に似た JSX 構造が JavaScript オブジェクトに変換されます。
import React from 'react' import ReactDOM from 'react-dom' class App extends React.Component { render () { return ( 1fb07efbe2524295a719668b214948aa 345d5db7f2762808d7874072253db7c0欢迎进入React的世界473f0a7621bec819994bb5020d29372a e388a4556c0f65e1904146cc1a846bee React.js 是一个构建页面 UI 的库 94b3e26ee717c64999d7867364b1b4a3 94b3e26ee717c64999d7867364b1b4a3 ) } } ReactDOM.render( 3efbfcf616b81c5b71826e3d65d503c4, document.getElementById('root') )
Convert to
import React from 'react' import ReactDOM from 'react-dom' class App extends React.Component { render () { return ( React.createElement( "p", { className: 'app', id: 'appRoot' }, React.createElement( "h1", { className: 'title' }, "欢迎进入React的世界" ), React.createElement( "p", null, "React.js 是一个构建页面 UI 的库" ) ) ) } } ReactDOM.render( React.createElement(App), document.getElementById('root') )
React.createElement は、タグ名、属性、サブ要素などを含む HTML 構造情報を記述する JavaScript オブジェクトを構築します。構文は
React.createElement( type, [props], [...children] )です。
いわゆる JSX は実際には JavaScript オブジェクトであるため、React と JSX を使用する場合はコンパイル プロセスを実行する必要があります
JSX — React を使用してコンポーネントを構築し、babel がそれらをコンパイルします—> JavaScriptオブジェクト— ReactDOM .render()
—> DOM 要素—> ページの挿入