初識React:帶你走入React世界

React概述

React 庫可以說是大廠中用到的最多的一個庫了,我們先來簡單瞭解一下 React 吧。

官網:https://react.docschina.org/

什麼是React?

在這裏插入圖片描述

React 是由 Facebook 研發的,一開始是 Facebook 用來架設自己的網站,後來開源了。用於解決UI複雜度的開源JavaScript庫,目前由 React 聯合社區維護。它並不是框架,只是爲了解決UI複雜度而誕生的一個庫

那 react 有什麼特點呢?

  1. 輕量:React的開發版所有源碼(包含註釋)僅3000多行
  2. 原生 JS:所有的React的代碼都是用原生JS書寫而成的,不依賴其他任何庫
  3. 易擴展:React對代碼的封裝程度較低,也沒有過多的使用魔法,所以React中的很多功能都可以擴展。
  4. 不依賴宿主環境:React只依賴原生JS語言,不依賴任何其他東西,包括運行環境。因此,它可以被輕鬆的移植到瀏覽器、桌面應用、移動端。
  5. 漸近式:React並非框架,對整個工程沒有強制約束力。這對與那些已存在的工程,可以逐步的將其改造爲React,而不需要全盤重寫。
  6. 單向數據流:所有的數據自頂而下的流動
  7. 組件化

react 和 vue 的對比:

對比項 Vue React
全球使用量
國內使用量
性能
易上手
靈活度
大型企業
中小型企業
生態

我的 react 系列,將會從 React 基礎,React 進階、React-Router、Redux、第三方腳手架、UI庫Ant Design和最後的源碼分析來依次更新。

我們初識一門語言總是來 “ Hello World ”

Hello World

直接在頁面上使用 React,引用下面的 JS

<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

React.createElement

創建一個 React 元素,稱作虛擬 DOM,本質上是一個對象

  1. param1:元素類型,可以是字符串(一個普通的HTML元素),也可以傳入一個組件
  2. param2:元素的屬性,一個對象
  3. 後續參數:元素的子節點
const h1 = React.createElement("h1",{id:"title"},"這是一個標題")
ReactDOM.render(h1,document.getElementById("root"))

ReactDOM.render

可以將 React 元素轉換爲 dom 元素

// ReactDOM.render(顯示的東西,容器);
ReactDOM.render("hello world",document.getElementById("root"))

我們通過這種方式書寫肯定會很不爽,所以 react 是支持 JSX 語法的

JSX

什麼是JSX

  • JSX是 Facebook 起草的 JS 擴展語法,需要使用 babel 進行轉義
// ...
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
    ReactDOM.render(<h1>這是一個標題</h1>, document.getElementById("root"))
</script>
  • 本質是一個JS對象,會被babel編譯,最終會被轉換爲React.createElement
const div = ( <div>這是一個div元素</div> )
//會被轉換爲
Reeact.createElement("div",{},"這是一個div元素")
  • 每個JSX表達式,有且僅有一個根節點
    • React.Fragment:如果想要有多個根節點,可以使用 React.Fragment ,它不會把<React.Fragment>渲染到頁面上
const h1 = (
  <React.Fragment>
    <h1>這是第一個JSX語法</h1>
    <p>這是內容</p>
  </React.Fragment>
)
//
const h1 = (
  <>
    <h1>這是第一個JSX語法</h1>
    <p>這是內容</p>
  </>
)
  • 每個 JSX 元素要遵循 XML 規範,必須有結束標籤
const img =  <img src="./logo.png" alt=""> //報錯

//正確寫法
const img =  <img src="./logo.png" alt="" /> //自閉合標籤
const img =  <img src="./logo.png" alt=""></img>

在JSX中嵌入表達式

const a=123,b=456;
const div = (
  <div> {a} * {b} = {a*b} </div>
)
//==>轉換爲
const div  = React.createElement("div",{},`${a} * ${b} = ${a*b}`)
  • 在JSX中使用註釋
{/* JSX中的註釋 */}
  • 將表達式作爲內容的一部分

    • null、undefined、false不會顯示
    //不會渲染到頁面上
    const img = undefined
    ReactDOM.render(img,document.getElementById("root"))
    
    • 普通對象,不可以作爲子元素
    const obj = {
      name:"monk",
      age:18
    }
    ReactDOM.render(<div> { obj } </div>,document.getElementById("root"))
    
    • 可以放置 React 元素對象
    const span = <span>這是一個span元素</span>
    const div = <div> { span } </div>
    ReactDOM.render(div, document.getElementById("root"))
    
    • 可以放置數組元素,但數組元素中有普通對象,同樣會報錯
    const arr = [1,2,3,4]
    const div = <div> { arr } </div>
    ReactDOM.render(div, document.getElementById("root"))
    
  • 將表達式作爲元素屬性

  • 屬性使用小駝峯命名法

<img src={url} className="image" style={ {width:"200px"} } alt="">
  • 防止注入攻擊,會自動編碼
  const content = "<h1>monk</h1>"
  cosnt div = (
  	<div>{ content }</div>
  )
  //渲染結果是: <h1>monk</h1>
  • dangerouslySetInnerHTML
 const content = "<h1>monk</h1>"
 cosnt div = (
 	<div dangerouslySetInnerHTML={{ __html:content }}></div>
 )

 //渲染結果是(大標題): monk

JSX元素的不可變性

  • 雖然 JSX 元素是一個對象,但是該對象中的所有屬性不可更改
let div = <div>這是一個 div 元素</div>
ReactDOM.render(div, document.getElementById("root"))
div = <div>這是一個修改過的 div 元素</div>
  • 如果確實需要更改元素的屬性,需要重新創建 JSX 元素,不用擔心性能問題,此時改變的是虛擬 dom,ReactDOM 進行優化處理了
div = <div>這是一個修改過的 div 元素</div>
//重新渲染
ReactDOM.render(div, document.getElementById("root"))

開發環境搭建

VSCode配置

  • 在 js 中可以編寫標籤的配置(JSX語法)

在這裏插入圖片描述
settings.json中配置:

"emmet.includeLanguages":{
    "javascript": "javascriptreact"
}

VSCode插件安裝

  • ES7 React/Redux/GraphQL/React-Native snippets:快速編寫React相關代碼

Chrome插件安裝

  • React Developer Tools:谷歌商店中可以下載

使用腳手架搭建工程

  • create-react-app腳手架,類似vue-cli
yarn create react-app projectName
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章