亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

給React初學(xué)者的10分鐘ES6教程

Awbeci / 3324人閱讀

摘要:但是在中,可以通過關(guān)鍵字來實現(xiàn)類的繼承的使用可以使得繼承意義更加明確并且值得一提的是,如果你使用來定義的組件,那么可以在類的構(gòu)造器里面,用簡單的的聲明方式來替代方法。

原文:The 10 min ES6 course for the beginner React Developer
譯者:Jim Xiao

著名的80/20定律可以用來解釋React和ES6的關(guān)系。因為ES6增加了超過75個新特性,但是根據(jù)我自身學(xué)習(xí)React經(jīng)驗,只使用了不到20%的ES6新特性。

注意: 在這篇文章中,為了避免引起混淆,我把JavaScript近似等同于ECMAScript(ES), 而ES6 = ES5 + 新特性,所以ES6和ES5都相當(dāng)于JavaScript。他們之間的區(qū)別就是支持不同的語法以及ES6新加了一些功能。

當(dāng)我從Angular 1和純ES5轉(zhuǎn)到React時,我看了一些教程,當(dāng)了解到箭頭函數(shù)和解構(gòu)語句時,我十分迷惑,不知道哪些語法來自React, 哪些語法來自ES6。

但是在大概一周之后,我基本上確定了,像{name}這樣的語法只能寫在React中(說明該語法不是來自ES6)。

這并不是一個完整的教程,只是我在React代碼中使用ES6的小結(jié)。那我們開始吧。

Let和const

在舊版的JavaScript (ES5)中,我們使用關(guān)鍵字var來聲明變量, 利用JavaScript變量提升的黑魔法, 我們甚至可以在沒有聲明變量前,就使用該變量:

// ES5
console.log(myVar); // undefined
var myVar = 10;

這種變量提升可能帶來一些難以預(yù)見的結(jié)果。但是在ES6就不會存在了。通過使用let或者const關(guān)鍵字,你必須先聲明變量,才能使用它:

// ES6
console.log(myVar) // ReferenceError: myVar is not defined
let myVar = 10

從下面的結(jié)果可以看出,constlet的不同在于,用const聲明變量,該變量值是不能更改的,而let可以更改:

// ES6
let x = 10
const y = 20
x = 25 // Ok
y = 30 // TypeError: Assignment to constant variable.
不再使用分號

ES6以及所有相關(guān)的工具都很好地支持了自動分號插入。所以,ES6的代碼中可以幾乎去掉所有的分號, 使代碼看起來更加簡潔:

//ES5
var theNumber = 10;
console.log(theNumber);

//ES6 - 可以去掉分號
let theNumber = 10
console.log(theNumber)

這并不是一個很大的改動,但確實是讓代碼看起來更舒服,尤其當(dāng)你是CoffeeScript代碼風(fēng)格的粉絲。

箭頭函數(shù)

在ES5語法中,如果聲明一個函數(shù),需要這樣寫:

// ES5
var sum = function(a, b) {
   return a + b
}

在ES6中,你可以通過箭頭函數(shù)快速聲明函數(shù):

// ES6
const sum = (a, b) => {return a + b} 

并且,如果你只需要簡單的一行函數(shù),甚至可以去掉return關(guān)鍵字

// ES6
const sum = (a, b) => a + b // 一行箭頭函數(shù)會自動返回結(jié)果

還有非常重要的一點,就是箭頭函數(shù)的this是綁定了父級作用域的上下文:

function DogWorldContext() {
  this.age = 0

  setInterval(function growUp() {
    this.age++
    console.log(this.age)
  }, 1000)
}
var worldWithStandardFunction = new DogWorldContext()
// 將會每秒打印NaN,因為growUp是普通函數(shù),它有自己this關(guān)鍵字的指向
function DogWorldContext() {
  this.age = 0

  setInterval(()=> {
    this.age++
    console.log(this.age)
  }, 1000)
}
var worldWithArrowFunction = new DogWorldContext()
// 將會每隔1s打印出1,2,3...

箭頭函數(shù)沒有自己的this綁定。該this上下文就是父級作用域的上下文,本例子中,就是DogWorldContext

解構(gòu)

知名開發(fā)者網(wǎng)站Developer.mozillar.org對解構(gòu)的定義是: 從數(shù)組和函數(shù)中提取值,并存儲為變量。

提取對象的屬性值是非常常見的做法。比如下面的代碼:

// ES5; this.props.user = {name: "Daniel", age : 32}
alert(this.props.user.name + " " + this.props.user.age);

為了使之更易讀, 我們把屬性值賦給變量:

// ES5; this.props.user = {name: "Daniel", age : 32}
var name = this.props.user.name;
var age = this.props.user.age;
alert(name + " " + age);

在ES6中,我們可以使用對象解構(gòu):

// ES6; this.props.user = {name: "Daniel", age : 32}
const {name} = this.props.user
const {age} = this.props.user
alert(name + " " + age)

我們甚至可以簡寫為一行:

// ES6; this.props.user = {name: "Daniel", age : 32}
const {name, age} = this.props.user
alert(name + " " + age)
對象字面量

ES6允許我們用更少的代碼表示對象鍵值對。

// ES5
str = "HELLO"
number = 20
obj = {
   str: str,
   number: number
}

在ES6中,上面的代碼可以變?yōu)椋?/p>

// ES6
str = "HELLO"
number = 20
obj = { str, number} //  obj = {str: "HELLO", number: 20}
類,構(gòu)造器和方法

以前的JavaScript沒有class這個關(guān)鍵字,為了創(chuàng)建一個簡單的Dog類,需要使用構(gòu)造函數(shù)來模擬這個類:

// ES5
function Dog(name, weight){
  this.name = name;
  this.weight = weight;
}

Dog.prototype.speak = function(){
    alert("Woof, woof … my name is: " + this.name);
};

// 用new關(guān)鍵字初始化對象
var dog = new Dog("Spike", 25);

// 調(diào)用方法
dog.speak(); // alerts “Woof, woof … my name is: Spike”

你可以通過ES5的構(gòu)造函數(shù)得到一個基本的對象和該對象的方法,但是并沒有得到”開箱即用”的類。那么看看ES6的class是怎么做的:

//ES6
class Dog {
   constructor(name, weight) {
      this.name = name
      this.weight = weight
   }
   speak() {
     alert("Woof, woof … my name is: " + this.name)
   }
}
const dog = new Dog("Spike", 25)
dog.speak()
類的繼承和React

ES5中可以通過原型鏈繼承的方式實現(xiàn)繼承。但是在ES6中,可以通過關(guān)鍵字extends來實現(xiàn)類的繼承:

var Greeting = createReactClass({
  render: function() {
    return 

Hello, {this.props.name}

; } });

ES6 extends的使用可以使得繼承意義更加明確:

class Greeting extends React.Component {
  render() {
    return 

Hello, {this.props.name}

; } }

并且值得一提的是,如果你使用extends來定義React的組件,那么可以在類的構(gòu)造器里面,用簡單的this.state =...的聲明方式來替代getInitialState()方法。

Filter函數(shù)

比如我們有以下的數(shù)組:

const numbers = [5,1, 20, 90, 8, 22, 33, 9]

如果想通過上面的數(shù)組來創(chuàng)建一個新的數(shù)組,而里面的值都是大于10的。在ES5的語法下,你可能需要一個for循環(huán),或者一些相似的操作(比如: jQuery的each())。

現(xiàn)在,我們有了ES6,就可以使用filter函數(shù)來遍歷數(shù)組中的所有值,并且留下那些滿足條件的值。

//ES6

const notDigits = numbers.filter( function(value) {return value > 9})
console.log(notDigits) // 打印出 [20,90,22,33]

// 或者使用箭頭函數(shù):
const notDigits1 = numbers.filter( (value) =>  {return value > 9}
// 或者使用箭頭函數(shù)默認(rèn)返回的形式去掉return關(guān)鍵字:
const notDigits2 = numbers.filter( (value) => value > 9 )
Map函數(shù)

Map函數(shù)可能是JavaScript最不被人重視的函數(shù)之一,即使它在ES5語法就有了?;旧?,如果你需要遍歷一個數(shù)組,你就可以使用map函數(shù)。

比如我們有跟上面例子一樣的數(shù)組:

const numbers = [5,1, 20, 90, 8, 22, 33, 9]

如果想操作數(shù)組,就可以使用map函數(shù):

numbers.map( (n) => console.log(n))
// 還可以加第二個參數(shù), index
numbers.map( (n, index) => console.log(n + " is the " + index + " value from the array ") )
// 或者我們想創(chuàng)建新的數(shù)組
const double= numbers.map( (n) => n*2 )

你將會在React中經(jīng)??吹?b>map(), 很多時候它會用來顯示一個項目列表:

render() {
    return(
  this.props.items.map( (item, key) =>  

{item}

) }

以上就是我在寫React代碼中使用最多的ES6特性,可能會有一些偏頗以及帶有主觀性,但是我絕沒有貶低ES6其他新功能實用性的想法。如前所述,還有許多其他ES6在這里沒有涉及,但這些概念允許你輕松地從ES5 React升級到新的ES6語法,并了解來自React以及來自新ES6功能的內(nèi)容。Cheers and happy coding!

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/95461.html

相關(guān)文章

  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...

    princekin 評論0 收藏0
  • 前端資源收集整理

    摘要:工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長,但是干貨超級多,值得反復(fù)精讀! 聽說2017你想寫前端?:適合于已經(jīng)度過了小白階...

    awesome23 評論0 收藏0
  • 前端資源收集整理

    摘要:工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長,但是干貨超級多,值得反復(fù)精讀! 聽說2017你想寫前端?:適合于已經(jīng)度過了小白階...

    antyiwei 評論0 收藏0
  • 前端資源收集整理

    摘要:工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長,但是干貨超級多,值得反復(fù)精讀! 聽說2017你想寫前端?:適合于已經(jīng)度過了小白階...

    KavenFan 評論0 收藏0
  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評論0 收藏0

發(fā)表評論

0條評論

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