1. 程式人生 > 其它 >react學習-react入門

react學習-react入門

react入門[js的編寫]

react介紹

  • 用於動態構建使用者介面的javascript庫
  • 由facebook開源

react特點

  • 宣告式編碼
  • 元件化編碼
  • React Native編寫原生應用
  • 高效[Diffing演算法]

react高效的原因

  • 使用虛擬DOM,不總是直接操作頁面的真實DOM
  • DOM Diffing演算法,最小頁面重繪

react的基本使用

       #### react相關js庫
  • react.js: react核心庫
  • react-dom.js: 提供操作DoM的react擴充套件庫
  • babel.min.js: 解析JSX語法程式碼轉化為JS程式碼的庫
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>hello_react</title>
</head>
<body>
	<!-- 準備好一個“容器” -->
	<div id="test"></div>

	<!-- 引入react核心庫 -->
	<script type="text/javascript" src="../js/react.development.js"></script>
	<!-- 引入react-dom,用於支援react操作DOM -->
	<script type="text/javascript" src="../js/react-dom.development.js"></script>
	<!-- 引入babel,用於將jsx轉為js -->
	<script type="text/javascript" src="../js/babel.min.js"></script>

	<script type="text/babel" > /* 此處一定要寫babel */
		//1.建立虛擬DOM
		const VDOM = <h1>Hello,React</h1> /* 此處一定不要寫引號,因為不是字串 */
		//2.渲染虛擬DOM到頁面
		ReactDOM.render(VDOM,document.getElementById('test'))
	</script>
</body>
</html>

虛擬DOM的兩種建立方式

  • jsx建立

    const VDOM = (  
    			<h1 id="title">
    				<span>Hello,React</span>
    			</h1>
    		)
    
  • js建立(不常用)

    //由React提供了一些API來建立一種 “特別” 的一般js物件
    const VDOM = 
    React.createElement('h1',{id:'title'},React.createElement('span',{},'Hello,React'))
    

真實DOM與虛列DOM

  • 虛擬DOM物件最終都會被React轉化成為 真實DOM
  • 編碼時只需操作虛擬DOM相關的資料

Jsx語法規則

  • 定義虛擬DOM時,不要寫引號
  • 標籤中混入js表示式要用{}
  • 樣式的類名指定不要用class,要用className
  • 內聯樣式,要用style={{key:value}}的形式去寫
  • 只能有一個根標籤
  • 標籤首字母
    • 若小寫字母開頭,則將該標籤轉為html中同名元素,若html中無該標籤對應的同名元素,則報錯。
    • 若大寫字母開頭,react就去渲染對應的元件,若元件沒有定義,則報錯

react中的定義元件

  • 函式式元件
<script type="text/babel">
		//1.建立函式式元件
		function MyComponent(){
			console.log(this); //此處的this是undefined,因為babel編譯後開啟了嚴格模式
			return <h2>我是用函式定義的元件(適用於【簡單元件】的定義)</h2>
		}
		//2.渲染元件到頁面
		ReactDOM.render(<MyComponent/>,document.getElementById('test'))
		/* 
			執行了ReactDOM.render(<MyComponent/>.......之後,發生了什麼?
					1.React解析元件標籤,找到了MyComponent元件。
					2.發現元件是使用函式定義的,隨後呼叫該函式,將返回的虛擬DOM轉為真實DOM,隨後呈現在頁面中。
		*/
	</script>
  • 類式元件

    <script type="text/babel">
    		//1.建立類式元件
    		class MyComponent extends React.Component {
    			render(){
    				//render是放在哪裡的?—— MyComponent的原型物件上,供例項使用。
    				//render中的this是誰?—— MyComponent的例項物件 <=> MyComponent元件例項物件。
    				console.log('render中的this:',this);
    				return <h2>我是用類定義的元件(適用於【複雜元件】的定義)</h2>
    			}
    		}
    		//2.渲染元件到頁面
    		ReactDOM.render(<MyComponent/>,document.getElementById('test'))
    		/* 
    			執行了ReactDOM.render(<MyComponent/>.......之後,發生了什麼?
    					1.React解析元件標籤,找到了MyComponent元件。
    					2.發現元件是使用類定義的,隨後new出來該類的例項,並通過該例項呼叫到原型上的render方法。
    					3.將render返回的虛擬DOM轉為真實DOM,隨後呈現在頁面中。
    		*/
    	</script>