若是使用render函數來寫比較複雜的vue組件,對於可讀性和可維護性都很不友好,而使用jsx就會讓咱們回到更接近於模板的語法。babel轉譯器會將jsx轉譯爲render函數渲染。vue
配置node
須要用到babel插件react
安裝npm
1編程 2babel 3dom 4ide 5函數 6this |
|
.babelrc配置
在plugins中添加transform-vue-jsx
1 2 3 4 |
|
基礎示例
轉義前
1 |
|
轉譯後
1 2 3 4 5 |
|
Note:h
函數爲vue實例的$createElement
方法,必須存在於jsx的做用域中,在渲染函數中必須以第一個參數傳入,如:
1 2 3 |
|
自動注入h函數
從3.4.0開始,在用ES2015語法聲明的方法和getter
訪問器中(使用function
關鍵字或箭頭函數除外),babel會自動注入h
(const h = this.$createElement
)函數,因此能夠省略(h)參數。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Vue JSX 和 React JSX對比
首先, Vue2.0 的vnode 格式與react不一樣,createElement
函數的第二個參數是一個數據對象,接受一個嵌套的對象,每個嵌套對象都會有對應的模塊處理。
Vue2.0 render語法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
對應的Vue2.0 JSX語法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
JSX展開運算符
支持JSX展開,插件會智能的合併數據屬性,如:
1 2 3 4 |
|
合併後的數據爲:
1 |
|
Vue 指令
JSX對大多數的Vue內建指令都不支持,惟一的例外是v-show
,該指令能夠使用v-show={value}
的語法。大多數指令均可以用編程方式實現,好比v-if
就是一個三元表達式,v-for
就是一個array.map()
等。
若是是自定義指令,能夠使用v-name={value}
語法,可是改語法不支持指令的參數arguments
和修飾器modifier
。有如下兩個解決方法:
將全部內容以一個對象傳入,如:v-name={{ value, modifier: true }}
使用原生的vnode指令數據格式,如:
1 2 3 4 5 |
|