1. 程式人生 > 其它 >WEBPACK+ES6+REACT入門(2/7)-在專案中使用react以及JSX語法介紹

WEBPACK+ES6+REACT入門(2/7)-在專案中使用react以及JSX語法介紹

技術標籤:reactjses6reactwebpack

WEBPACK+ES6+REACT入門2/7-在專案中使用react以及JSX語法介紹

前言

因本人專案需求,需要進行前端技術學習,特將學習內容整理如下。
因為對前端的技術十分陌生,希望各大神批評指正!
為了方便交流與學習,特將本筆記整理為七大部分,以下內容為第二部分。

開始之前

因webpack各版本配置不同,在執行install命令時,可配置需求所用版本。命令舉例:npm install [email protected] [email protected] -S。此命令為開發和上線環境下(-S)安裝對應版本的react和react-dom。實際安裝時,各版本如下所示,

 "react": "^16.2.0",
 "react-dom": "^16.2.0"
 "babel-core": "^6.26.0",
 "babel-loader": "^7.1.4",
 "babel-plugin-transform-runtime": "^6.23.0",

步驟

1、執行命令npm install react react-dom -S,安裝react和react-dom。(-S表示開發和上線,都需要用到)

react:用以建立元件和虛擬dom,同時此包包含了元件的生命週期
react-dom:用以進行dom操作,最主要的場景:ReactDom.render()
2、在index.js中編碼如下:

//1、引入react和react-dom。接受的成員名稱,必須這麼寫
import React from 'react' //建立元件、虛擬dom元素、生命週期
import ReactDOM from 'react-dom'//把建立好的元件和虛擬dom放到頁面展示

//2、建立虛擬dom元素  
//引數1:建立元素型別,字串,表示元素名稱
//引數2:物件或者null,表示當前dom元素屬性
//引數3:子節點,包括其他虛擬dom或文字子節點
//引數n:其他子節點 //html寫法參考: //<h1 id='myh1' title='this is a h1'>這是h1</h1> const myh1 = React.createElement('h1',null,'這是h1') //3、使用reactdom把虛擬dom渲染到頁面上 //引數1:要渲染的虛擬dom //引數2:指定頁面上一個容器 ReactDOM.render( myh1, document.getElementById('app') )

3、此時,<h1>標籤並無屬性,原因:在index.js程式碼第25行,在建立虛擬dom元素時,引數二dom元素屬性傳遞的值為null。<h1>標籤並無屬性。chrome顯示如下圖所示:
chrome顯示
4、將引數二修改為接受的物件,更改index.js程式碼如下:

const myh1 = React.createElement(
'h1',
{id:'myh1',title:'this is a h1'},
'這是h1')

此時,頁面中只有一個<h1>,現在需求在<h1>外面包裹一層<div>,方法為再新增一個虛擬dom元素,並完成兩個虛擬dom屬性的巢狀關係。
5、在index.js中修改程式碼如下:

//1、引入react和react-dom。接受的成員名稱,必須這麼寫
import React from 'react' //建立元件、虛擬dom元素、生命週期
import ReactDOM from 'react-dom'//把建立好的元件和虛擬dom放到頁面展示

//2、建立虛擬dom元素  
//引數1:建立元素型別,字串,表示元素名稱
//引數2:物件或者null,表示當前dom元素屬性
//引數3:子節點,包括其他虛擬dom或文字子節點
//引數n:其他子節點
//html寫法參考:
//<h1 id='myh1' title='this is a h1'>這是h1</h1>
const myh1 = React.createElement(
   'h1',
   {id:'myh1',title:'this is a h1'},
   '這是h1')

const mydiv = React.createElement(
   'div',
   null,
   '這是div',
   myh1  //追加節點,完成虛擬dom元素的巢狀//3、使用reactdom把虛擬dom渲染到頁面上
//引數1:要渲染的虛擬dom
//引數2:指定頁面上一個容器
  ReactDOM.render(
	//myh1,
     mydiv, //將巢狀後的div渲染到頁面上
     document.getElementById('app')
  )

渲染頁面上的dom結構,最好的方式是通過html程式碼實現。
但是在以上操作時,都是在js檔案中實現,js檔案不允許使用html程式碼標記,存在打包失敗的問題。
在react中,允許使用。實現方式是使用babel轉換js標籤。

jsx:在js中混合寫入類似html的語法。即符合xml規範的js。jsx語法的本質:在執行時,被轉換成react.createElement形式。
為練習以上描述內容,新建index.js,程式碼如下:

 //1、引入react和react-dom。接受的成員名稱,必須這麼寫
import React from 'react' //建立元件、虛擬dom元素、生命週期
import ReactDOM from 'react-dom'//把建立好的元件和虛擬dom放到頁面展示

//2、建立虛擬dom元素
const mydiv = <div id="mydiv" title = "this is a div">這是一個div</div> 

//3、使用reactdom把虛擬dom渲染到頁面上
//引數1:要渲染的虛擬dom
//引數2:指定頁面上一個容器
   ReactDOM.render(
	  mydiv, //將巢狀後的div渲染到頁面上
	  document.getElementById('app')
   ) 

6、安裝babel等外掛,命令為:npm install [email protected] [email protected] [email protected] -D
7、安裝babel語法,命令為:npm install [email protected] [email protected] [email protected] -D
8、在webpack.config.js檔案的module中新增loader等所有第三方模組配置規則,程式碼如下:

module.exports={
     mode:'development',//development:開發環境 production:產品環境
     //webpack4.x中,有一個很大的特性:約定大於配置 約定的預設打包入口路徑為:src->index.js 
     //所以將index.html檔案重新命名為index.js
     plugins:[
          htmlWebPackPlugin
     ],
     module:{//所有第三方模組的配置規則
          rules:[//第三方匹配規則
               {
                 test:/\.jsx?/,
                 use:'babel-loader',
                 exclude:/node_modules/
               },
          ]
     },

9、專案根目錄下新增babel的配置檔案.babelrc,並新增如下配置:

{
   "presets":["env","stage-0","react"],
   "plugins":["transform-runtime"]
}

10、現在可在頁面中新增html語法標記。

 //1、引入react和react-dom。接受的成員名稱,必須這麼寫
import React from 'react' //建立元件、虛擬dom元素、生命週期
import ReactDOM from 'react-dom'//把建立好的元件和虛擬dom放到頁面展示

//2、建立虛擬dom元素
const mydiv = <div id="mydiv" title = "this is a div">
	這是一個div
	<h1>這是一個h1</h1>
	</div> 

//3、使用reactdom把虛擬dom渲染到頁面上
//引數1:要渲染的虛擬dom
//引數2:指定頁面上一個容器
   ReactDOM.render(
	  mydiv, //將巢狀後的div渲染到頁面上
	  document.getElementById('app')
   ) 

第二部分專案中使用react以及JSX語法介紹結束。