Vue.js開發的4個基本ES2015特性

Vue.js專家解釋瞭如何在使用Vue框架進行編碼時使用JavaScript的最新功能。請繼續閱讀!

ES2015(又名ES6)是JavaScript語言的當前規範。如果您是JavaScript新手或最近沒有更新JavaScript知識,ES2015中有許多新功能可使開發更好,更令人愉快。

如果您是Vue開發人員,您將從學習所有這些新功能中受益。但作為一種分類手段,您可以從適用於Vue的那些功能開始。

Vue.js開發的4個基本ES2015特性

在本文中,我將向您展示您將每天與Vue一起使用的四個ES2015功能。我將提供每個解釋和簡要示例。

  1. 箭頭功能

  2. 模板文字

  3. 模塊

  4. 解構和擴展語法

1.箭頭功能

// Regular JavaScript function

function(parameters) {

statements

}

// Arrow function

(parameters) => {

statements

}

沒有界限 this

箭頭函數的一個重要特性是它們不綁定值this。相反,他們使用this封閉的上下文。

考慮需要回調函數的JavaScript數組方法。Array.filter例如,允許您返回一個新的數組,只包含那些與回調函數定義的過濾器相匹配的項目。

Vue.js的一個重要功能是,您可以輕鬆訪問this.vuePropertyVue配置對象上下文中的數據屬性,計算屬性和方法。

但是,如果您使用常規函數進行回調,它將為其自己的值綁定this。您不能this.vueProperty從回調中引用Vue對象的屬性,您必須在回調的範圍內手動創建它們。

new Vue({

data: {

size: 'large',

items: [ { size: 'small' }, { size: 'large' } ]

},

computed: {

filterBySize() {

let size = this.size;

return this.items.filter(function(item) {

return item.size === size;

// Note: this.size is undefined

});

}

}

});

箭頭函數使用this封閉上下文中的對象。在這種情況下,它來自filterBySizeVue對象綁定到的計算屬性,該屬性this簡化了filter回調:

filterBySize() {

return this.items.filter((item) => {

return item.size === this.size;

});

}

疑難雜症

雖然箭頭函數可以在很多情況下有效地使用,但這並不意味著我們應該在開發Vue時始終使用它們。事實上,你不應該在Vue配置對象上使用箭頭函數作為函數屬性,因為它們需要this從Vue構造函數訪問上下文。

// Regular function

var regular = new Vue({

data: {

val: 'Hello world'

},

computed: {

upperCase() {

return this.val.toUpperCase();

}

}

});

console.log(regular.upperCase); // HELLO WORLD

// Arrow function

var arrow = new Vue({

data: {

val: 'Hello world'

},

computed: {

upperCase: () => {

return this.val.toUpperCase();

}

}

});

console.log(arrow.upperCase);

// Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

單參數和隱式返回

在某些情況下,您可以使箭頭函數的語法更加簡潔。如果您的功能只有一個參數,則可以刪除括號()。如果你的函數只有一個表達式,你甚至可以放下大括號{}!

下面是從上面實現的那些shorthands的數組過濾器回調:

filterBySize() {

return this.items.filter(item => item.size === this.size);

}

2.模板文字

模板文字使用反引號(``)而不是雙引號或單引號來定義字符串。

模板文字允許我們在Vue.js中做兩件超級有用的事情:

多行字符串(非常適合組件模板)。

嵌入表達式(很適合計算屬性)。

多行字符串

用JavaScript代碼編寫模板並不理想,但有時我們需要/需要。但是如果模板有很多內容呢?在ES2015之前,我們有兩個選擇:

首先,把它放在一條線上:

Vue.component({

template: '

{{ title }}

{{ message }}

'

});

線路變長時,這真的很難讀懂。

Vue.component({

template: '

' +

'

{{ title }}

' +

'

{{ message }}

' +

''

});

模板文字解決了這個問題,因為它們允許多行字符串而不需要分割字符串:

Vue.component({

template: `

{{ title }}

{{ message }}

`

});

嵌入式表達式

有時我們想要一個字符串是動態的,即包含一個變量。這在計算屬性中非常常見,您可能希望在從反應的Vue.js數據屬性派生的模板中插入一個字符串。

new Vue({

data: {

name: 'George'

},

computed: {

greeting() {

return 'Hello, ' + this.name + ', how are you?'

}

}

});

通過${}在模板文字中使用佔位符,我們可以在不破壞字符串的情況下插入變量和其他表達式:

new Vue({

data: {

name: 'George'

},

computed: {

greeting() {

return `Hello, ${this.name}, how are you?`

}

}

});

3.模塊

如何將JavaScript對象從一個文件加載到另一個文件中?在ES2015之前沒有原生的方式。使用JavaScript 模塊,我們可以使用導出和導入語法來完成它:

file1.js

export default {

myVal: 'Hello'

}

file2.js

import obj from './file1.js';

console.log(obj.myVal); // Hello

模塊提供了兩個關鍵好處:

  1. 我們可以將我們的JavaScript應用分成多個文件。

  2. 我們可以讓某些代碼在各個項目中可重用。

組件模塊

模塊文件的一個很好的用例是組件。在ES2015之前,我們需要將所有組件定義放在主文件中,包括我們的Vue實例,例如

app.js

Vue.component('component1', { ... });

Vue.component('component2', { ... });

Vue.component('component3', { ... });

new Vue({ ... });

如果我們繼續這樣做,我們的app.js文件將變得非常龐大和複雜。使用模塊,我們可以將組件定義放在單獨的文件中並實現更好的組織,例如:

component1.js

export default {

// component definition

};

我們現在可以在我們的主文件中導入組件定義對象:

app.js

import component1 from './component1.js';

Vue.component('component1', component1);

...

模塊化組件的更好選擇是使用單個文件組件。這些使用JavaScript模塊,但也需要像Webpack這樣的構建工具。有關更多信息,請參閱此文章。

要閱讀關於JavaScript模塊的更多信息,請從這裡開始導入功能。

4.解構和擴展語法

對象是Vue.js開發的重要組成部分。通過一些新的語法功能,ES2015可以更輕鬆地處理對象屬性。

解構賦值

解構允許我們解開對象屬性並將它們分配給不同的變量。採取以下的對象 myObj。為了將它的屬性分配給新變量,我們使用.符號:

let myObj = {

prop1: 'Hello',

prop2: 'World'

};

const prop1 = myObj.prop1;

const prop2 = myObj.prop2;

使用解構賦值,我們可以更簡潔地做到這一點:

let myObj = {

prop1: 'Hello',

prop2: 'World'

};

const { prop1, prop2 } = myObj;

console.log(prop1);

// Output: Hello

解構在Vuex操作中很有用。操作接收context包含state對象和commitAPI方法屬性的對象:

actions: {

increment (context) {

// context.state

// context.commit(...)

}

}

不過,通常情況下,您不需要操作中的state屬性,只需要使用該commitAPI。通過在函數配置文件中使用解構賦值,可以創建一個commit用於正文的參數,從而減少此函數的詳細程度:

actions: {

increment ({ commit }) {

commit(...);

}

}

不過,通常情況下,您不需要操作中的state屬性,只需要使用該commitAPI。通過在函數配置文件中使用解構賦值,可以創建一個commit用於正文的參數,從而減少此函數的詳細程度:

actions: {

increment ({ commit }) {

commit(...);

}

}

擴展語法

在傳播語法允許我們展開的對象為在多個鍵/值對預期的地方。要將信息從一個對象複製到另一個對象之前,我們必須這樣做:

let myObj = {

prop1: 'Hello',

prop2: 'World'

};

let newObj = {

name: 'George',

prop1: myObj.prop1,

prop2: myObj.prop2

};

console.log(newObj.prop1); // Hello

使用擴展運算符...,我們可以更簡潔地做到這一點:

let newObj = {

name: 'George',

...myObj

};

console.log(newObj.prop1); // Hello

再次以Vuex為例,我們經常希望將我們的Vuex狀態屬性用作計算屬性。在ES2015之前,我們必須手動複製每一個。例如:

store.js

new Vuex.Store({

state: {

prop1: ...,

prop2: ...,

prop3: ...

}

});

app.js

new Vue({

computed: {

prop1() {

return store.state.prop1;

},

prop2() {

return store.state.prop2;

}

...

}

});

Vuex提供了一個mapState函數,該函數返回一個對象,其中包含通過提供其鍵來指定的所有Vuex狀態屬性:

import { mapState } from 'vuex';

var state = mapState(['prop1', 'prop2', 'prop3']);

console.log(state.prop1) // { ... }

使用mapState與傳播結合運營商,我們可以與那些在一個非常簡潔的方式從Vuex結合本地計算性能:

app.js

import { mapState } from 'vuex';

new Vue({

computed: {

someLocalComputedProp() { ... },

...mapState(['prop1', 'prop2', 'prop3'])

}

});

這很酷!還有什麼?

以上是您將立即在Vue項目中使用的ES2015功能。當然,還有很多其他的ES2015功能在Vue.js編程中很有用。如果你想繼續從這裡學習,我會建議這兩個作為你的下一個主題:

承諾。這些有助於異步編程,可以與Async Components以及Vuex Actions一起使用。

Object.assign。這不是你經常需要的東西,但它會幫助你理解Vue的反應性系統是如何工作的。Vue.js 3.x可能會使用新的Proxies功能,所以請檢查一下!


分享到:


相關文章: