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 ( <p className='app' id='appRoot'> <h1 className='title'>欢迎进入React的世界</h1> <p> React.js 是一个构建页面 UI 的库 </p> </p> ) } } ReactDOM.render( <App />, 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 要素—> ページの挿入