国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

精益 React 學習指南 (Lean React)- 1.2 JSX 語法

moven_j / 706人閱讀

摘要:需要提醒讀者的是,的很多例子都是通過來寫的,但這并不是語法,后面我們會有多帶帶的一小節(jié)講解的基本語法,不過目前為止我們先將跟多精力放在上。

書籍完整目錄

1.2 JSX 語法

官方文檔 https://facebook.github.io/react/docs/jsx-in-depth.html

JSX 語法聽上去很討厭,但當真正使用的時候會發(fā)現(xiàn),JSX 的寫法在組件的組合和屬性的傳遞上提供了非常靈活的解決方案。

在學習本節(jié)的時候,希望讀者在閱讀的同時能夠?qū)嶋H編碼體驗 JSX ,寫代碼的意思是真的要寫.代.碼。

1.2.1 準備 React 運行環(huán)境

為了快速開始 JSX 的學習,我們可以通過如下幾種方式快速進入 React 開發(fā)環(huán)境

方式一:Babel REPL

Babel REPL

直接在 REPL 中寫 JSX 語法,可以實時的查看編譯后的結(jié)果。

方式二:JSFiddle

在線模式 React Fiddle

方式三:本地開發(fā)

第一步:打開編輯器,新建一個 hello-react.html 文件
第二步:粘貼 Hello, world 代碼



  
    
    Hello React!
    
    
    
  
  
    
方式四:clone Github hello-world 分支代碼

https://github.com/leanklass/leanreact/tree/hello-world

1.2.2 JSX 語法 JSX 本質(zhì)

創(chuàng)建 JSX 語法的本質(zhì)目的是為了使用基于 xml 的方式表達組件的嵌套,保持和 HTML 一致的結(jié)構(gòu),語法上除了在描述組件上比較特別以外,其它和普通的 Javascript 沒有區(qū)別。 并且最終所有的 JSX 都會編譯為原生 Javascript。

需要提醒讀者的是,React 的很多例子都是通過 ES6 來寫的, 但這并不是 JSX 語法,后面我們會有多帶帶的一小節(jié)講解 ES6 的基本語法,不過目前為止我們先將跟多精力放在 JSX 上。

xml 基本規(guī)則

JSX 構(gòu)建組件的規(guī)則和 xml 規(guī)則一致

嵌套規(guī)則

標簽可以任意的嵌套

eg:

function render() {
  return 

text content

  • ....
  • ....

}
標簽閉合

標簽必須嚴格閉合,否則無法編譯通過

自閉合:

function render() {
  return 
}

標簽閉合:

function render() {
  return 

....

}
JSX 組件

JSX 組件分為 HTML 組件和 React 組件

HTML 組件就是 HTML 中的原生標簽, 如:

function render() {
  return  

hello, React World

} function render() { return
  • list item 1
  • list item 2
}

React 組件就是自定義的組件,如

// 定義一個自定義組件
var CustomComponnet = React.createClass({
  render: function() {
    return 
custom component
} }); // 使用自定義組件 function render() { return

}
組件屬性

和 html 一樣,JSX 中組件也有屬性,傳遞屬性的方式也相同

對于 HTML 組件

 function render() {
   return  

hello, React, world

}

如果是 React 組件可以定義自定義屬性,傳遞自定義屬性的方式:

  function render() {
    return 

} }

屬性即可以是字符串,也可以是任意的 Javascript 變量
, 傳遞方式是將變量用花括號, eg:

  function render() {
    var data = {a: 1, b:2};
    return 

}

需要注意的地方上,屬性的寫法上和 HTML 存在區(qū)別,在寫 JSX 的時候,所有的屬性都是駝峰式的寫法,如:

function render() {
    return  
}

而原生的寫法為:

    

主要是出于標準的原因,駝峰式是 Javascript 的標準寫法,并且 React 底層是將屬性直接對應(yīng)到原生 DOM 的屬性,而原生 DOM 的屬性是駝峰式的寫法,這里也可以理解為什么類名不是 class 而是 className 了, 又因為 class 和 for 還是 js 關(guān)鍵字,所以 jsx 中:

class => className

for => htmlFor

除此之外比較特殊的地方是 data-*aria-* 兩類屬性是和 HTML 一致的。

JSX 花括號 顯示文本

很多情況,我們需要將 JS 中的文本直接顯示,做法和顯示變量屬性一樣,用花括號

  function render() {
    var text = "Hello, World"
    return 

{text}

}
運算

花括號里邊實際上除了變量以外,可以是一段 JS 表達式,我們可以利用花括號做簡單的運算:

  funtion render() {
    var text = text;
    var isTrue = false;
    var arr = [1, 2, 3];
    return 

{text} {isTrue ? "true" : "false"} {arr.map(function(it) { return {it} })}

}
JSX 注釋

注釋的寫法如下:

  function render() {
    return 

/* 這里是注釋內(nèi)容 */

}
限制規(guī)則

render 方法返回的組件必須是有且只有一個根組件,錯誤情況的例子

  // 無法編譯通過,JSX 會提示編譯錯誤
  function render() {
    return (

....

....

) }
組件命名空間

JSX 可以通過命名空間的方式使用組件, 通過命名空間的方式可以解決相同名稱不同用途組件沖突的問題。

如:

  function render() {
    return 

}
1.2.3 理解 JSX JSX 的編譯方式

JSX 的寫法最終會被編譯成原生的 Javascript。 如果你愿意的話,也可以直接寫編譯后的 JS, 不過最好是寫 JSX, 因為 JSX 的目的就是為了簡化寫法,并保持和 HTML 相同的開發(fā)體驗。

JSX 具體的編譯方式有兩種

在 HTML 中引入 babel 編譯器, 如上 Hello World 程序中一樣。

離線編譯 JSX,通過 babel 編譯 JSX,細節(jié)我們將在第二章中講解。

JSX 到 JS 的轉(zhuǎn)化

Hello World 程序轉(zhuǎn)化為 JS 的代碼如下:

  var Hello = React.createClass({
    displayName: "Hello",
    render: function() {
      return React.createElement("div", null, "Hello ", this.props.name);
    }
  });

  ReactDOM.render(
    React.createElement(Hello, {name: "World"}),
    document.getElementById("container")
  );

可以看出:

<=> React.createElement(Hello, ....)

xml 的寫法實際上是調(diào)用 React 的工廠方法 createElement。

當理解了 JSX 最終會編譯為 JS 就可以理解 JSX 的一些特性如命名空間,組件實際上就是一個 Javascript 對象,命名空間下的組件相當于對象的屬性

1.2.4 實例練習:通過數(shù)據(jù)渲染 TODOMVC 代辦事項列表

TODOMVC 以代辦事項列表為需求模型,包含了各種框架的實現(xiàn)。 本例子的目的為了讓讀者能夠切身的體會 JSX 的使用方法。

問題需求

根據(jù)一個 JSON 對象,用 React JSX 的方式渲染出 TODOMVC 頁面:

JSON 對象如下:

var todolist = {
    name: "todos",
    todos: [{
            completed: false,
            title: "finish exercise"
        }, {
            completed: false,
            title: "lean jsx"
        }, {
            completed: true,
            title: "lean react"
        }]
}

修改 hello world index.html 中的代碼,為了簡化問題, 我們可以直接復(fù)制 TODOMVC 中的 HTML 和 CSS 。

Tips

class 要寫為 className

input 標簽未閉合

數(shù)組遍歷過后要添加 key 屬性,否則會提示 error 信息(在組件章節(jié)會講解)

html 轉(zhuǎn) JSX工具, Facebook 提供了 html 轉(zhuǎn) JSX 組件的工具,可以直接復(fù)制 html 轉(zhuǎn)為 JSX 組件

參考答案

https://github.com/leanklass/leanreact/tree/jsx

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/54338.html

相關(guān)文章

  • 精益 React 學習指南Lean React)- 1.1 React 介紹

    摘要:單向數(shù)據(jù)流應(yīng)用的核心設(shè)計模式,數(shù)據(jù)流向自頂向下我也是性子急的人,按照技術(shù)界的慣例,在學習一個技術(shù)前,首先得說一句。然而的單向數(shù)據(jù)流的設(shè)計讓前端定位變得簡單,頁面的和數(shù)據(jù)的對應(yīng)是唯一的我們可以通過定位數(shù)據(jù)變化就可以定位頁面展現(xiàn)問題。 書籍完整目錄 1.1 React 介紹 showImg(https://segmentfault.com/img/bVvJgS); 1.1.1 React ...

    lsxiao 評論0 收藏0
  • 精益 React 學習指南Lean React)- 1.3 React 組件

    摘要:無狀態(tài)組件除了可以通過來創(chuàng)建組件以外,組件也可以通過一個普通的函數(shù)定義,函數(shù)的返回值為組件渲染的結(jié)果。這就是為什么要有屬性,屬性能夠幫助定位與數(shù)組元素的關(guān)系,在重渲染的時候能夠?qū)崿F(xiàn)渲染優(yōu)化。 書籍完整目錄 1.3 React 組件 showImg(https://segmentfault.com/img/bVvLOW); 1.3.1 React 組件介紹 在 React 中組件是第一元...

    cyrils 評論0 收藏0
  • 精益 React 學習指南Lean React)- 1.3 React 組件

    摘要:無狀態(tài)組件除了可以通過來創(chuàng)建組件以外,組件也可以通過一個普通的函數(shù)定義,函數(shù)的返回值為組件渲染的結(jié)果。這就是為什么要有屬性,屬性能夠幫助定位與數(shù)組元素的關(guān)系,在重渲染的時候能夠?qū)崿F(xiàn)渲染優(yōu)化。 書籍完整目錄 1.3 React 組件 showImg(https://segmentfault.com/img/bVvLOW); 1.3.1 React 組件介紹 在 React 中組件是第一元...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

moven_j

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<