楔子
最近小夥伴問了,React 的 jsx 基本的結構長如何,是如何轉換的之類的,順便記錄一下網路大神的資料摘錄。
- React 有一個 createElement 的方法可以把資料轉成 react 特殊的結構
React.createElement('div', props={})
- 收到特殊的結構之後再由 ReactDOM.render 來進行放在 html 上的位置
ReactDOM.render(jsDOM, document.getElementById('root'))
React Basic
React vs ReactDOM
摘錄一些 Kent 的示範 code 來演示一下,element 1 ~ 3 就是各種 jsDOM 的寫法,比較特別的是 React.createElement 可以有 2 ~3 個輸入參數
- 第一個參數指的是 HTML 的 DOM 種類(eg. div span …)
- 第二個參數輸入的是該 DOM 的 props
- 第三個參數輸入的是 children
const element1 = React.createElement('div', {className: 'container'})
const element2 = React.createElement('div', {className: 'container'}, 'Hello', '', 'World')
const element3 = React.createElement('div', children: ['Hello', '', 'World'])
ReactDOM.render(element, document.getElementById('root'))
再試試看不同的輸入方式
const helloElement = React.createElement('span', null, 'Hello')
const worldElement = React.createElement('span', {children: 'World'})
const element4 = React.createElement('div', children: [helloElement, '', worldElement]) // key pro
const element5 = React.createElement('div', {className: 'container'}, helloElement, '', worldElement )
ReactDOM.render(element4, document.getElementById('root'))
ReactDOM.render(element5, document.getElementById('root'))
JSX
jsx 的格式大概長相就是 <div {...props}>{children}<div>
const className = 'container'
const children = 'Hello World'
const element = <div className={className}>{children}</div>
再做一些 spread 展開的運用方式
const className = 'container'
const children = 'Hello World'
const props = {children, className}
const element = <div className={props.className}>{props.children}</div>
const element2 = React.createElement('div', {id:'my-thing', ...props})
ReactDOM.render(element, document.getElementById('root'))
ReactDOM.render(element2, document.getElementById('root'))