日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

十分鐘,帶你了解 Vue3 的新寫法

來源: 責編: 時間:2023-08-20 23:16:59 652觀看
導讀最近,因為項目需要,不得不學習一下 vue3。于是花了 4 個小時,把 Vue3 過了一遍?,F在我來帶你快速了解 Vue3 的寫法。本文的目的,是為了讓已經有 Vue2 開發經驗的 人 ,快速掌握 Vue3 的寫法。因此, 本篇假定你已經掌握 Vue

最近,因為項目需要,不得不學習一下 vue3。于是花了 4 個小時,把 Vue3 過了一遍?,F在我來帶你快速了解 Vue3 的寫法。d5C28資訊網——每日最新資訊28at.com

d5C28資訊網——每日最新資訊28at.com

本文的目的,是為了讓已經有 Vue2 開發經驗的 人 ,快速掌握 Vue3 的寫法。d5C28資訊網——每日最新資訊28at.com

因此, 本篇假定你已經掌握 Vue 的核心內容 ,只為你介紹編寫 Vue3 代碼,需要了解的內容。d5C28資訊網——每日最新資訊28at.com

一、Vue3 里 script 的三種寫法

首先,Vue3 新增了一個叫做組合式 api 的東西,英文名叫 Composition API。因此 Vue3 的 script 現在支持三種寫法,d5C28資訊網——每日最新資訊28at.com

1、最基本的 Vue2 寫法

<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script>export default {  data() {    return {      count: 1,    };  },  methods: {    onClick() {      this.count += 1;    },  },}</script>

2、setup() 屬性

<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script>import { ref } from 'vue';export default {  // 注意這部分  setup() {    let count = ref(1);    const onClick = () => {      count.value += 1;    };    return {      count,      onClick,    };  },}</script>

3、script setup

<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script setup>import { ref } from 'vue';const count = ref(1);const onClick = () => {  count.value += 1;};</script>

正如你看到的那樣,無論是代碼行數,還是代碼的精簡度,<script setup> 的方式是最簡單的形式。d5C28資訊網——每日最新資訊28at.com

如果你對 Vue 很熟悉,那么,我推薦你使用 <script setup> 的方式。d5C28資訊網——每日最新資訊28at.com

這種寫法,讓 Vue3 成了我最喜歡的前端框架。d5C28資訊網——每日最新資訊28at.com

如果你還是前端新人,那么,我推薦你先學習第一種寫法。d5C28資訊網——每日最新資訊28at.com

因為第一種寫法的學習負擔更小,先學第一種方式,掌握最基本的 Vue 用法,然后再根據我這篇文章,快速掌握 Vue3 里最需要關心的內容。d5C28資訊網——每日最新資訊28at.com

第一種寫法,跟過去 Vue2 的寫法是一樣的,所以我們不過多介紹。d5C28資訊網——每日最新資訊28at.com

第二種寫法,所有的對象和方法都需要 return 才能使用,太啰嗦。除了舊項目,可以用這種方式體驗 Vue3 的新特性以外,我個人不建議了解這種方式。反正我自己暫時不打算精進這部分。d5C28資訊網——每日最新資訊28at.com

所以,接下來,我們主要介紹的,也就是 <script setup> ,這種寫法里需要了解的內容。d5C28資訊網——每日最新資訊28at.com

注意: <script setup> 本質上是第二種寫法的語法糖,掌握了這種寫法,其實第二種寫法也基本上就會了。(又多了一個不學第二種寫法的理由)。d5C28資訊網——每日最新資訊28at.com

二、如何使用 script setup編寫組件

學習 Vue3 并不代表你需要新學習一個技術,Vue3 的底層開發思想,跟 Vue2 是沒有差別的。d5C28資訊網——每日最新資訊28at.com

V3 和 V2 的區別就像是,你用不同的語言或者方言說同一句話。d5C28資訊網——每日最新資訊28at.com

所以我們需要關心的,就是 Vue2 里的內容,怎么用 Vue3 的方式寫出來。d5C28資訊網——每日最新資訊28at.com

1、data——唯一需要注意的地方

整個 data 這一部分的內容,你只需要記住下面這一點。d5C28資訊網——每日最新資訊28at.com

以前在 data 中創建的屬性,現在全都用 ref() 聲明。d5C28資訊網——每日最新資訊28at.com

在 template 中直接用,在 script 中記得加 .value 。d5C28資訊網——每日最新資訊28at.com

在開頭,我就已經寫了一個簡單的例子,我們直接拿過來做對比。d5C28資訊網——每日最新資訊28at.com

1)寫法對比

// Vue2 的寫法<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script>export default {  data() {    return {      count: 1,    };  },  methods: {    onClick() {      this.count += 1;    },  },}</script> // Vue3 的寫法<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script setup>import { ref } from 'vue'; // 用這種方式聲明const count = ref(1);const onClick = () => {   // 使用的時候記得 .value  count.value += 1;};</script>

2)注意事項——組合式 api 的心智負擔

a、ref 和 reactive

Vue3 里,還提供了一個叫做 reactive 的 api。d5C28資訊網——每日最新資訊28at.com

但是我的建議是,你不需要關心它。絕大多數場景下,ref 都夠用了。d5C28資訊網——每日最新資訊28at.com

b、什么時候用 ref() 包裹,什么時候不用。

要不要用ref,就看你的這個變量的值改變了以后,頁面要不要跟著變。d5C28資訊網——每日最新資訊28at.com

當然,你可以完全不需要關心這一點,跟過去寫 data 一樣就行。d5C28資訊網——每日最新資訊28at.com

只不過這樣做,你在使用的時候,需要一直 .value。d5C28資訊網——每日最新資訊28at.com

c、不要解構使用

在使用時,不要像下面這樣去寫,會丟失響應性。d5C28資訊網——每日最新資訊28at.com

也就是會出現更新了值,但是頁面沒有更新的情況d5C28資訊網——每日最新資訊28at.com

// Vue3 的寫法<template>  <div>{{ count }}</div>  <button @click="onClick">    增加 1  </button></template><script setup>import { ref } from 'vue';const count = ref(1);const onClick = () => {  // 不要這樣寫??!  const { value } = count;  value += 1;};</script>

注意: 學習 Vue3 就需要考慮像這樣的內容,徒增了學習成本。實際上這些心智負擔,在學習的過程中,是可以完全不需要考慮的。d5C28資訊網——每日最新資訊28at.com

這也是為什么我推薦新人先學習 Vue2 的寫法。d5C28資訊網——每日最新資訊28at.com

2、methods

聲明事件方法,我們只需要在 script 標簽里,創建一個方法對象即可。d5C28資訊網——每日最新資訊28at.com

剩下的在 Vue2 里是怎么寫的,Vue3 是同樣的寫法。d5C28資訊網——每日最新資訊28at.com

// Vue2 的寫法<template>  <@click="onClick">    這是一個 </div></template><script>export default {  methods: {    onClick() {      console.log('clicked')    },  },}</script>// Vue3 的寫法<template>  <@click="onClick">    這是一個 </div></template><script setup>// 注意這部分const onClick = () => {  console.log('clicked')}</script>

3、props

聲明 props 我們可以用 defineProps(),具體寫法,我們看代碼。d5C28資訊網——每日最新資訊28at.com

1)寫法對比

// Vue2 的寫法<template>  <div>{{ foo }}</div></template><script>export default {  props: {    foo: String,  },  created() {    console.log(this.foo);  },}</script>// Vue3 的寫法<template>  <div>{{ foo }}</div></template><script setup>// 注意這里const props = defineProps({  foo: String})// 在 script 標簽里使用console.log(props.foo)</script>

2)注意事項——組合式 api 的心智負擔

使用 props 時,同樣注意不要使用解構的方式。d5C28資訊網——每日最新資訊28at.com

<script setup>const props = defineProps({  foo: String}) // 不要這樣寫const { foo } = props;console.log(foo)</script>

4、emits 事件

與 props 相同,聲明 emits 我們可以用 defineEmits(),具體寫法,我們看代碼。d5C28資訊網——每日最新資訊28at.com

// Vue2 的寫法<template>  <@click="onClick">    這是一個 </div></template><script>export default {  emits: ['click'], // 注意這里  methods: {    onClick() {      this.$emit('click'); // 注意這里    },  },}</script>// Vue3 的寫法<template>  <@click="onClick">    這是一個 </div></template><script setup>// 注意這里const emit = defineEmits(['click']);const onClick = () => {  emit('click') // 注意這里}</script>

5、computed

直接上寫法對比。d5C28資訊網——每日最新資訊28at.com

// Vue2 的寫法<template>  <div>    <span>{{ value }}</span>    <span>{{ reversedValue }}</span>  </div></template><script>export default {  data() {    return {      value: 'this is a value',    };  },  computed: {    reversedValue() {      return value        .split('').reverse().join('');    },  },}</script>// Vue3 的寫法<template>  <div>    <span>{{ value }}</span>    <span>{{ reversedValue }}</span>  </div></template><script setup>import {ref, computed} from 'vue'const value = ref('this is a value')// 注意這里const reversedValue = computed(() => {  // 使用 ref 需要 .value  return value.value    .split('').reverse().join('');})</script>

6、watch

這一部分,我們需要注意一下了,Vue3 中,watch 有兩種寫法。一種是直接使用 watch,還有一種是使用 watchEffect。d5C28資訊網——每日最新資訊28at.com

兩種寫法的區別是:d5C28資訊網——每日最新資訊28at.com

  • watch 需要你明確指定依賴的變量,才能做到監聽效果。
  • 而 watchEffect 會根據你使用的變量,自動的實現監聽效果。

1)直接使用 watch

// Vue2 的寫法<template>  <div>{{ count }}</div>  <div>{{ anotherCount }}</div>  <button @click="onClick">    增加 1  </button></template><script>export default {  data() {    return {        count: 1,      anotherCount: 0,    };  },  methods: {    onClick() {      this.count += 1;    },  },  watch: {    count(newValue) {      this.anotherCount = newValue - 1;    },  },}</script>// Vue3 的寫法<template>  <div>{{ count }}</div>  <div>{{ anotherCount }}</div>  <button @click="onClick">    增加 1  </button></template><script setup>import { ref, watch } from 'vue';const count = ref(1);const onClick = () => {  count.value += 1;};const anotherCount = ref(0);// 注意這里// 需要在這里,// 明確指定依賴的是 count 這個變量watch(count, (newValue) => {  anotherCount.value = newValue - 1;})</script>

2)使用 watchEffect

// Vue2 的寫法<template>  <div>{{ count }}</div>  <div>{{ anotherCount }}</div>  <button @click="onClick">    增加 1  </button></template><script>export default {  data() {    return {        count: 1,      anotherCount: 0,    };  },  methods: {    onClick() {      this.count += 1;    },  },  watch: {    count(newValue) {      this.anotherCount = newValue - 1;    },  },}</script>// Vue3 的寫法<template>  <div>{{ count }}</div>  <div>{{ anotherCount }}</div>  <button @click="onClick">    增加 1  </button></template><script setup>import { ref, watchEffect } from 'vue';const count = ref(1);const onClick = () => {  count.value += 1;};const anotherCount = ref(0);// 注意這里watchEffect(() => {  // 會自動根據 count.value 的變化,  // 觸發下面的操作  anotherCount.value = count.value - 1;})</script>

7、生命周期

Vue3 里,除了將兩個 destroy 相關的鉤子,改成了 unmount,剩下的需要注意的,就是在 <script setup> 中,不能使用 beforeCreate 和 created 兩個鉤子。d5C28資訊網——每日最新資訊28at.com

如果你熟悉相關的生命周期,只需要記得在 setup 里,用 on 開頭,加上大寫首字母就行。d5C28資訊網——每日最新資訊28at.com

// 選項式 api 寫法<template>  <div></div></template><script>export default {  beforeCreate() {},  created() {},    beforeMount() {},  mounted() {},    beforeUpdate() {},  updated() {},    // Vue2 里叫 beforeDestroy  beforeUnmount() {},  // Vue2 里叫 destroyed  unmounted() {},    // 其他鉤子不常用,所以不列了。}</script>// 組合式 api 寫法<template>  <div></div></template><script setup>import {  onBeforeMount,  onMounted,  onBeforeUpdate,  onUpdated,  onBeforeUnmount,  onUnmounted,} from 'vue'onBeforeMount(() => {})onMounted(() => {})onBeforeUpdate(() => {})onUpdated(() => {})onBeforeUnmount(() => {})onUnmounted(() => {})</script>

三、結語

好了,對于快速上手 Vue3 來說,以上內容基本已經足夠了。d5C28資訊網——每日最新資訊28at.com

這篇文章本身不能做到幫你理解所有 Vue3 的內容,但是能幫你快速掌握 Vue3 的寫法。d5C28資訊網——每日最新資訊28at.com

如果想做到對 Vue3 的整個內容心里有數,還需要你自己多看看 Vue3 的官方文檔。d5C28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-6172-0.html十分鐘,帶你了解 Vue3 的新寫法

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用 Python 生成和讀取條形碼

下一篇: 六種在 React 中獲取數據的方法

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美极品色图| 亚洲精品免费一二三区| 国产精品v欧美精品∨日韩| 国产精品99一区| 国产欧美二区| 在线国产精品一区| 日韩一级大片在线| 性欧美8khd高清极品| 久久婷婷影院| 欧美日韩你懂的| 国产一区二区精品久久| 亚洲国产高清一区二区三区| 一本色道婷婷久久欧美| 久久精品视频网| 欧美另类在线播放| 国产美女一区| 最新国产成人在线观看| 在线中文字幕不卡| 久久精品二区亚洲w码| 欧美黄色视屏| 国产欧美一区二区精品婷婷 | 亚洲欧美美女| 久久免费视频观看| 欧美网站在线观看| 在线不卡免费欧美| 亚洲综合精品一区二区| 欧美不卡一区| 国产视频欧美视频| 99视频精品免费观看| 久久福利视频导航| 欧美日韩精品一区二区在线播放| 国产亚洲福利一区| 一区二区三区日韩欧美| 六月丁香综合| 国产日产欧美a一级在线| 亚洲伦理中文字幕| 久久另类ts人妖一区二区| 国产精品久久久久久久久果冻传媒 | 久久久久99| 欧美亚洲成人网| 亚洲国产一区二区三区高清| 欧美一区日本一区韩国一区| 欧美日韩亚洲一区二区三区在线 | 亚洲免费视频中文字幕| 欧美顶级少妇做爰| 国产真实精品久久二三区| 亚洲午夜激情| 欧美精品 日韩| 激情婷婷欧美| 羞羞视频在线观看欧美| 国产精品wwwwww| 亚洲剧情一区二区| 免费亚洲一区二区| 激情五月***国产精品| 香蕉久久夜色精品国产| 欧美性猛交xxxx乱大交蜜桃| 亚洲人成绝费网站色www| 久久中文精品| 极品少妇一区二区| 欧美一区二区三区四区在线| 欧美系列亚洲系列| 夜夜爽www精品| 欧美激情性爽国产精品17p| 在线观看av一区| 久久久亚洲欧洲日产国码αv| 国产精品主播| 亚洲欧美日韩综合| 国产精品欧美一区二区三区奶水| 亚洲视频在线视频| 欧美日韩在线亚洲一区蜜芽| 亚洲伦理久久| 欧美精品性视频| 亚洲巨乳在线| 欧美日韩人人澡狠狠躁视频| aa级大片欧美三级| 欧美久久99| 亚洲精品一区二区三区在线观看| 欧美国产成人精品| 亚洲欧洲日本在线| 欧美福利视频| 亚洲精品综合| 欧美日韩三级| 亚洲网友自拍| 国产精品亚洲综合| 午夜精品www| 国产日韩欧美综合一区| 欧美永久精品| 韩国视频理论视频久久| 久久久久欧美精品| 亚洲电影天堂av| 欧美成人综合网站| 99re在线精品| 国产精品国码视频| 欧美亚洲在线| 激情久久五月天| 美女久久一区| 亚洲精品影院在线观看| 欧美日韩另类字幕中文| 亚洲一区成人| 国产日韩精品一区观看| 久久久久**毛片大全| 在线观看国产欧美| 欧美激情一区二区三区在线视频| 日韩小视频在线观看专区| 欧美性天天影院| 欧美在线观看视频一区二区三区| 狠狠狠色丁香婷婷综合久久五月 | 日韩视频在线一区| 国产精品国产三级国产专区53| 性色一区二区| 亚洲高清不卡一区| 欧美日韩高清区| 亚洲欧美综合一区| 伊人夜夜躁av伊人久久| 欧美日韩国产三级| 午夜精品久久一牛影视| 狠狠色丁香婷婷综合| 欧美精品国产一区二区| 亚洲一区二区精品| 国内久久精品视频| 欧美激情第4页| 亚洲欧美中文另类| 亚洲国产精品va在线观看黑人| 欧美噜噜久久久xxx| 亚洲欧美国产va在线影院| 黄色一区二区在线| 欧美伦理视频网站| 欧美一区激情视频在线观看| 亚洲国产日韩一级| 欧美性猛交99久久久久99按摩| 久久精品天堂| 日韩午夜电影av| 国产亚洲女人久久久久毛片| 欧美成人免费在线视频| 亚洲一区bb| 亚洲国产高清一区| 国产精品麻豆va在线播放| 久久免费午夜影院| 亚洲视频专区在线| 在线播放国产一区中文字幕剧情欧美| 欧美理论在线播放| 久久久美女艺术照精彩视频福利播放| 亚洲精品在线观看视频| 国产欧美一区二区精品忘忧草| 欧美成人在线免费视频| 亚洲欧美日韩国产| 亚洲激情成人| 国产日韩av一区二区| 欧美日本韩国一区二区三区| 久久国产综合精品| 99国产精品久久久| 激情久久五月| 国产精品美女久久久久av超清| 欧美 日韩 国产 一区| 欧美亚洲自偷自偷| 99亚洲精品| 亚洲国产高清aⅴ视频| 国产欧美精品xxxx另类| 欧美精品激情blacked18| 久久久国产一区二区三区| 亚洲小视频在线| 亚洲日本中文字幕免费在线不卡| 国内精品嫩模av私拍在线观看| 国产精品va在线播放我和闺蜜| 男女激情视频一区| 久久福利一区| 亚洲欧美日韩天堂一区二区| 99国产精品99久久久久久粉嫩| 亚洲第一区中文99精品| 国产亚洲午夜高清国产拍精品| 国产精品久久久久77777| 欧美激情中文字幕在线| 久久久亚洲国产美女国产盗摄| 亚洲欧美激情一区| 一区二区高清视频在线观看| 亚洲国产一区在线| 在线观看欧美日韩| 国产亚洲一二三区| 国产精品私拍pans大尺度在线| 欧美精品粉嫩高潮一区二区| 美日韩丰满少妇在线观看| 欧美一区二区三区免费视频| 亚洲一二区在线| 一区二区激情视频| 日韩视频免费观看| 亚洲日本中文字幕| 亚洲区中文字幕| 91久久精品日日躁夜夜躁国产| 永久久久久久| 一区二区三区在线观看欧美| 国产一区二区三区在线观看视频 | 一区二区三区高清| 日韩一区二区免费高清| 91久久久一线二线三线品牌| 亚洲福利视频一区二区| 一区一区视频| 影音先锋在线一区| 在线观看av不卡| 在线观看成人av电影| 在线观看日韩www视频免费| 极品少妇一区二区三区| 在线观看精品| 亚洲人www| 亚洲精选在线|