JSX:
1, 全稱: JavaScript XML;
2, react定義的一種類似于XML的JS擴展語法 : JS + XML
3, 本質是React.createElement(component,props,....children) 方法的語法糖
4, 作用:用來創(chuàng)建虛擬DOM
a. 寫法: var ele = <h1>Hello JSX</h1>
b. 注意1: 它不是字符串, 也不是HTML/XML標簽
c. 注意2: 它最終產生的就是一個JS對象
5, 標簽名任意:HTML標簽或其它標簽
JSX語法規(guī)則:
1, 定義虛擬DOM時,不要寫引號
2, 標簽中混入JS表達式時,要用{}[注意區(qū)分JS語句與JS表達式]
3, 樣式的類名指定不要用class(React關鍵詞), 要用className
4, 內聯(lián)樣式,要用style={{key:value}}的形式去寫外面{},代表js,里面{}代表json
5, 只有一個根標簽
6, 標簽必須閉合
7, 標簽首字母:
1> 若小寫字母開頭,則將改標簽轉為html中同名元素, 若html中無該標簽對應的同名元素,則報錯
2> 若大寫字母開頭,react就去渲染對應的組件,若組件沒有定義,則報錯區(qū)分JS語句與表達式:
一定要注意區(qū)分:【JS語句(代碼)】與【JS表達式】
1. 表達式: 一個表達式會產生一個值, 可以放在任何一個需要值的地方
下面這些都是表達式:
1> a
2> a + b
3> arr.map()
4> function test(){}即使沒有return , 也會返回函數(shù)本身
2. 語句(代碼):
下面這些都是語句(代碼)
1> if(){}
2> for(){}
3> switch(){case:xxxx}
key是虛擬dom標簽的唯一標識, diffing算法靠key來區(qū)分不同, 是不是同一個key
實例如下:
<!-- 準備好一個 "容器" 用來放React的東西-->
<div id="test"></div>
<!-- 引入react核心庫 全局多一個對象React -->
<script src="../../js/react.development.js"></script>
<!-- 引入react-dom, 用于支持react操作DOM 全局又多一個對象ReactDOM -->
<script src="../../js/react-dom.development.js"></script>
<!-- 引入babel, 用于將JSX轉為JS -->
<script src="../../js/babel.min.js"></script>
<script type="text/babel"> //此處一定要寫babel, 不寫默認是JS
let myId = "testDiv";
let content = "Hello,React";
const VDOM = (
<div>
<h1 id={myId} className="title" style={{color:'#fff'}}>
{content}
</h1>
<input type="text" name="" id="" />
</div>
)
ReactDOM.render(VDOM,document.getElementById("test"));