成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

教練,怎么在vue項目里寫react?

開發(fā) 前端
我承認了我是標題黨,本篇文章是在vue項目里寫tsx的一篇介紹。作為一個reacter,目前的業(yè)務天天使用vue2+ts讓我十分的不舒服。

 [[424253]]

1.前言

我承認了我是標題黨,本篇文章是在vue項目里寫tsx的一篇介紹。作為一個reacter,目前的業(yè)務天天使用vue2+ts讓我十分的不舒服。我對于vue也不是很熟悉,想回到我的react時代。于是在查詢官網(wǎng)之后發(fā)現(xiàn)在vue里面寫jsx也挺有意思的,遂記錄。

2.正文

vue2+ts的項目配置這里就不展開了,網(wǎng)上一搜一大推。

index.vue是頁面路由,存放各個組件和公用邏輯。components文件夾中存放我的tsx組件。

接下來就開始寫tsx。

你可以直接創(chuàng)建jsx/tsx文件

這次的項目結構是這樣的:

在vue文件里這么使用

  1. // index.vue 
  2. <template> 
  3.   <div class="wrapper"
  4.     <Common :opt="list" /> 
  5.   </div> 
  6. </template> 
  7.   
  8. <script lang="ts"
  9. import { Component, Vue } from "vue-property-decorator"
  10. import Common from "./components/Common"
  11.  
  12. @Component({ 
  13.   name: "App"
  14.   components: { 
  15.     Common, 
  16.   }, 
  17. }) 
  18. export default class App extends Vue { 
  19.   private list = ["我要去淘寶""我要去百度""我要去京東"]; 
  20. </script> 

tsx這么寫

  1. import { CreateElement } from 'vue'
  2. import { Component, Vue, Prop } from 'vue-property-decorator'
  3.  
  4. @Component({ 
  5.     name: 'Common' 
  6. }) 
  7. export default class Common extends Vue { 
  8.     @Prop(Object) opt!: any[] 
  9.  
  10.     render(h: CreateElement) { 
  11.         return <span> 
  12.             { 
  13.                 this.opt.map((it) => { 
  14.                     return <span style="marginRight:10px">{it}</span> 
  15.                 }) 
  16.             } 
  17.         </span> 
  18.     } 

在來看一下頁面

這該死的react既視感,竟是如此的誘人

可能有心者注意到了 我還引用了一個 CreateElement ,這是干嘛的呢。這玩意叫 渲染函數(shù) 。不喜歡讀vue那么大串的文檔的兄弟看這里。簡單解釋:這個東西可以渲染一個vnode節(jié)點。 它比模板更接近編譯器。 什么意思呢?意思就是模板語法也會編譯成渲染函數(shù)。所以我們直接用渲染函數(shù)不就相當于節(jié)省了模板語法到渲染函數(shù)的過程。四舍五入項目性能又是一個大的提升!

簡單介紹一下傳參:

第一個參數(shù) : {String | Object | Function} 一個 HTML 標簽名、組件選項對象,或者 resolve 了上述任何一種的一個 async 函數(shù)。必填項。

第二個參數(shù) : Object 一個與模板中 attribute 對應的數(shù)據(jù)對象。

第三個參數(shù) : {String | Array} 文本節(jié)點或子級虛擬節(jié)點 (VNodes)。

渲染函數(shù)給vue帶來了很多的靈活性,以前你想自定義在子組件里插入東西,得寫一大堆的插槽。 <slot> 。有了渲染函數(shù)我們可以這么玩。

  1. // 改造一下上面的index.vue的data 
  2.  
  3.   private list = [ 
  4.     { render: () => ["a", { style: { color: "red" } }, "我要去淘寶"] }, 
  5.     { render: () => ["a", { style: { color: "green" } }, "我要去京東"] }, 
  6.     { render: () => ["a", { style: { color: "pink" } }, "我要去百度"] }, 
  7.   ]; 

tsx中這么寫:

  1.                 this.opt.map((it) => { 
  2.                     return h(...it.render()) 
  3.                 }) 
  4.             } 

就可以渲染出花里胡哨的頁面了

我們還可以這么玩:

  1. // tsx改造 
  2. <span> 
  3.             { 
  4.                 this.opt.map((it) => { 
  5.                     return it.render(h) 
  6.                 }) 
  7.             } 
  8. </span> 
  9.  
  10.  
  11. 在index.vue頁面我們就可以這么玩: 
  12. // index.vue 
  13. private list = [ 
  14.     { 
  15.       render: (h: CreateElement) => 
  16.         h("a", { style: { color: "red", marginRight: "5px" } }, "我要去淘寶"), 
  17.     }, 
  18.     { 
  19.       render: (h: CreateElement) => 
  20.         h("a", { style: { color: "green", marginRight: "5px" } }, "我要去京東"), 
  21.     }, 
  22.     { 
  23.       render: (h: CreateElement) => 
  24.         h("a", { style: { color: "pink", marginRight: "5px" } }, "我要去百度"), 
  25.     }, 
  26.   ]; 

結果也是同樣的花哨

我們同樣可以渲染亂七八糟的標簽!

  1. // index.vue改造 
  2.  { 
  3.       render: (h: CreateElement) => 
  4.         h( 
  5.           "h1"
  6.           { 
  7.             style: { color: "green", marginRight: "5px" }, 
  8.           }, 
  9.           "我要去京東" 
  10.         ), 
  11.     }, 

我們可以隨心所欲的在渲染函數(shù)中定義事件:

  1. // index.vue 
  2. private list = [ 
  3.    { 
  4.       render: (h: CreateElement) => 
  5.         h( 
  6.           "a"
  7.           { 
  8.             style: { color: "red", marginRight: "5px" }, 
  9.             on: { 
  10.               click: () => this.iWillGoWhere("TB"), 
  11.             }, 
  12.           }, 
  13.           "我要去淘寶" 
  14.         ), 
  15.    }] 
  16.     
  17.  iWillGoWhere(type: string) { 
  18.     const goWhere: any = { 
  19.       TB: () => { 
  20.         alert("我要去淘寶!"); 
  21.       }, 
  22.       JD: () => { 
  23.         alert("我要去京東!"); 
  24.       }, 
  25.       BD: () => { 
  26.         alert("我要去百度!"); 
  27.       }, 
  28.     }; 
  29.     goWhere[type](); 
  30.   } 

這樣就可以啦!

結尾

本次文章是對vue靈活性使用的入門。請各位vue大佬不要噴我~

責任編輯:張燕妮 來源: SegmentFault
相關推薦

2023-09-14 08:46:50

ReactVue

2022-05-09 08:55:52

ORMMockGo

2021-07-29 09:07:44

React視圖庫Web 開發(fā)

2018-12-04 10:24:23

VueReactJQuery

2017-10-14 22:45:55

前端

2020-10-30 12:40:04

Reac性能優(yōu)化

2024-05-08 16:22:37

2018-02-26 06:53:21

軟件程序員數(shù)字化

2020-09-14 14:18:05

Vue和React

2023-10-26 07:37:18

ReactVue項目

2022-06-28 10:58:48

協(xié)議通信加密

2023-04-26 08:43:28

GoCGO語言

2022-12-29 20:23:43

VueReact

2020-01-09 15:35:54

ReactAngularVue.js

2022-08-21 09:41:42

ReactVue3前端

2017-01-17 18:30:23

ReactVueWeex

2021-08-04 08:27:00

VueReact自動化部署

2017-01-17 09:39:06

ReactWeex

2022-09-23 10:25:00

VueReact

2023-01-27 11:13:04

WebReactVue
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线观看一区 | 日韩在线小视频 | 亚洲国产精品一区二区久久 | 久久91av | 欧美精品久久久久久久久久 | 欧美精品一区二区蜜桃 | 91 在线| 久久tv在线观看 | 国产精品永久在线观看 | 天堂网avav | 精品视频亚洲 | 羞羞的视频免费在线观看 | 最新国产视频 | 国产精品国产三级国产aⅴ中文 | 精品国产乱码久久久久久闺蜜 | 日韩精品一区在线观看 | 玖玖视频| 国产欧美一区二区精品久导航 | 久久国产精品一区二区三区 | 一二区成人影院电影网 | 欧美一级在线免费观看 | 亚洲国产网站 | 国产在线精品区 | 国产1页| 玖玖综合网| 欧美一区2区三区3区公司 | 国产91一区| 人人干人人干人人干 | 久久精品国产亚洲a | 欧美激情精品久久久久久 | av成年人网站 | 日韩成人在线观看 | 亚洲精品在线免费 | 免费视频一区二区 | 北条麻妃99精品青青久久主播 | 国产一区中文字幕 | 久久爱综合 | 国产精品激情在线 | 日日操视频 | 狠狠综合久久av一区二区小说 | 中文字幕高清av |