借鑒:原著
JSX語法,像是在Javascript代碼里直接寫XML的語法,實質上這只是一個語法糖,每一個XML標簽都會被JSX轉換工具轉換成純Javascript代碼,React 官方推薦使用JSX,當然你想直接使用純Javascript代碼寫也是可以的,只是使用JSX,組件的結構和組件之間的關系看上去更加清晰
看代碼:
那么也就是說,我們寫一個XML標簽,實質上就是在調用React.createElement這個方法,并返回一個ReactElement對象。
查看API:鏈接
這個方法的第一個參數可以是一個字符串,表示是一個HTML標準內的元素,或者是一個ReactClass類型的對象,表示我們之前封裝好的自定義組件。第二個參數是一個對象,或者說是字典也可以,它保存了這個元素的所有固有屬性(即傳入后基本不會改變的值)。從第三個參數開始,之后的參數都被認作是元素的子元素。
轉化
React JSX將類似XML的語法轉化到原生的JavaScript,元素的標簽、屬性和子元素都會被當作參數傳給React.createElement方法:
JSX轉化器
要把帶有JSX語法的代碼轉化為純Javascript代碼,有多種方式,對于內聯與HTML中的代碼或者是未經過轉化的外部文件,在script標簽中要加上type="text/jsx",并引入JSXTransformer.js文件即可,不過這種方式并不建議在生產環境使用,建議的方法是在代碼上線前就將代碼轉換好,可以使用npm全局安裝react-tools:
并使用命令行工具轉化即可(具體用法可以參考jsx -h):
如果使用自動化工具,比如gulp的話,可以使用相應插件gulp-react。
查看;鏈接
HTML 標簽 vs. React 組件
React.render方法可以渲染HTML結構,也可以渲染React組件。
渲染HTML標簽,聲明變量采用首字母小寫
渲染React組件,聲明變量采用首字母大寫
React 的 JSX 使用大寫和小寫字母來區分本地的組件類和 HTML 標簽.
不過需要注意的是class和for這兩個屬性,JSX語法最終是要被轉換為純Javascript的,所以要和在Javascript DOM中一樣,用className和htmlFor。
還有一點是,在創建HTML標準內的元素時,JSX轉化器會丟棄那些非標準的屬性,如果一定要添加自定義屬性,那么需要在這些自定義屬性之前添加data-前綴
命名空間式組件
比如開發組件的時候,一個組件有多個子組件,你希望這些子組件可以作為其父組件的屬性,那么可以像這樣用
這樣你只需將子組件的ReactClass作為其父組件的屬性: