日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue create()获取ref_vue-next+typescript 初体验

發(fā)布時間:2025/3/12 vue 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue create()获取ref_vue-next+typescript 初体验 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

無意間又一次刷到了尤大介紹 Vue 3 的文章,這次決定試一下 Vue 3 的 TypeScript 支持到底如何,不管別人說什么,只有自己用的舒服才是真的舒服。Vue 2 可是因?yàn)?ts 的緣故被噴的很慘,來看看 Vue 3 如何吧。

值得注意的是,編寫該篇文章時,vue 3 仍處于 beta 階段,版本號為 beta.14,代碼可能有變動,請關(guān)注官方和 RFC

準(zhǔn)備工作

注意

不要使用 vue-cli 配合 vue-cli-plugin-vue-next 來建立初始項(xiàng)目,該模板存在眾多 bug。我遇到的問題有:

  • $createElement is not defined
  • h is not defined
  • h is not function

總之無法使用 tsx,沒有了 tsx 就沒有靈魂了呀,這哪成啊。


使用 vite 來構(gòu)建項(xiàng)目,官方提供了 create-vite-app 腳手架來快速構(gòu)建一個新的 vue3 項(xiàng)目。同時也提供了 react、 react-ts、preact 的模板,全都是 out of box。感覺比得上 parcel(危)。(尤大太肝了

話不多說,直接開始。

yarn create vite-app vue3-demo-vite cd vue3-demo-vite code .

改寫 TSX

打開項(xiàng)目之后,默認(rèn)使用的是 js ,但是沒關(guān)系,直接安裝 ts

yarn add -D typescript

無需其他配置。直接刪除所有 vue 文件,新建一個 App.tsx

聲明一個組件的方式是使用 defineComponent 方法,目前還不知道是否支持 class component,但是可以使用 vue-class-component 庫。這里我們就是用原生支持的函數(shù)式寫法。有點(diǎn)類似于 React 的 FC。

一個簡單的累加器

單擊按鈕,使得數(shù)據(jù)+ 1.

import { defineComponent, ref } from 'vue' import style from './index.module.css' export default defineComponent({name: 'Counter',setup() {const count = ref(0)return () => (<><button onClick={(_) => count.value++} class={style['btn']}>Add</button><p>{count.value}</p></>)}, })

在 tsx 方面與 React 不同的是 class 和 className,input 的 onChange 和 onInput 。細(xì)心的你可能也會發(fā)現(xiàn),tsx 方面 vue 3 幾乎與 preact 一致。

注意

  • React 中的 onInput 和 onChange 有什么不同?沒有不同,是一樣的。但是原生事件中并不一致。in-react-whats-the-difference-between-onchange-and-oninput
  • vite 中使用 Fragment,無需引入,如果手動引入將會報(bào)錯。Fragment is already declared.,或者使用 <> </>語法糖即可。
  • vue 3 中暫不支持子組件中需要 props 傳遞,同時組件使用 Fragment 包裹的情況。此時會報(bào)錯。rawChildren.filter is not a function
  • vite 支持 css module,但是沒有聲明文件,IDE 可能會報(bào)錯。
  • Props 類型檢測與完美的 TS 提示

    終于,組件的 Props 能被 TS 識別了!!有點(diǎn)激動。

    舉個例子

    import { defineComponent } from 'vue'export default defineComponent({name: 'bar',props: {name: {type: String,required: true,},},setup(props) {return () => <div>{props.name}</div>}, })

    這是一個子組件,接收一個 name,并且顯示該 name

    在父組件引入。

    沒有圖片,被吃掉啦

    熟悉的味道來了,Auto Import 嗒。你說寫 ts 的目的是啥?

    沒有圖片,被吃掉啦

    不需要像 React 那樣寫 props 的 interface 了,有點(diǎn)小激動。

    Ref

    vue 3 中的 ref 對獲取 HTMLElement ref 的方法與 React 基本一致。

    import { defineComponent, ref, watch, onMounted } from 'vue' export default defineComponent({name: 'Image',setup() {const imageRef = ref<HTMLImageElement>() // 此時為 null// 掛載后獲取到其RefonMounted(() => {console.log(imageRef.value)// do anything...})// 或者watch(() => imageRef.value, // 當(dāng) img ref 傳遞到 imageRef 時,觸發(fā),獲取到其值(val) => {console.log(val) // 輸出獲取到的值},)return () => {return (<imgref={imageRef}src={'https://avatars0.githubusercontent.com/u/41265413?s=460&u=8c14b9682794c353995029327f439d736571426e&v=4'}/>)}}, })

    Lifecircle

    vue 3 中生命周期全部為 hook 的形式,也就是可以多次疊加觸發(fā)。一個生命周期鉤子可以定義多次,按順序執(zhí)行。

    import { defineComponent, onMounted, ref } from 'vue'export default defineComponent({name: 'lifecircle',setup() {const message = ref('')onMounted(() => {message.value = message.value + '我觸發(fā)了一次'})onMounted(() => {message.value = message.value + 'n我又觸發(fā)了一次'})return () => (<>this is lifecircle component.<pre>{message.value}</pre></>)}, })沒有圖片,被吃掉啦

    計(jì)算屬性

    通過 computed 方法包裝獲得計(jì)算屬性。

    import { defineComponent, ref, computed } from 'vue' import style from './index.module.css' export default defineComponent({name: 'Counter',setup() {const count = ref(0)const double = computed(() => count.value * 2) // 包裝一個計(jì)算屬性,value 為計(jì)算的值return () => (<><button onClick={(_) => count.value++} class={style['btn']}>Add</button><p>{count.value}</p><p>doubled: {double.value}</p></>)}, })

    文章標(biāo)題: vue-next+typescript 初體驗(yàn)

    文章鏈接: https://innei.ren/posts/learning-process/vue-next-with-vite [復(fù)制]

    最后修改時間: 2020年06月05日 13:38

    總結(jié)

    以上是生活随笔為你收集整理的vue create()获取ref_vue-next+typescript 初体验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。