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

Vue3 學(xué)習(xí)筆記—Script Setup 語法糖用了才知道有多爽

開發(fā) 前端
script setup是 vue3 的新語法糖,并不是新增的功能模塊,只是簡(jiǎn)化了以往的組合式 API 必須返回(return)的寫法,并且有更好的運(yùn)行時(shí)性能。

[[440450]]

剛開始使用 script setup 語法糖的時(shí)候,編輯器會(huì)提示這是一個(gè)實(shí)驗(yàn)屬性,要使用的話,需要固定 vue 版本。

在 6 月底,該提案被正式定稿,在 v3.1.3 的版本上,繼續(xù)使用但仍會(huì)有實(shí)驗(yàn)性提案的提示,在 V3.2 中,才會(huì)去除提示并移除一些廢棄的 API。

script setup 是啥?

script setup 是 vue3 的新語法糖,并不是新增的功能模塊,只是簡(jiǎn)化了以往的組合式 API 必須返回(return)的寫法,并且有更好的運(yùn)行時(shí)性能。

寫法簡(jiǎn)便:

  1. <script setup> 
  2. ... 
  3. </script> 

使用 script setup 語法糖時(shí),內(nèi)部的屬性或方法可以直接使用,無需 return 返回;引入子組件可以自動(dòng)注冊(cè),無需 components 注冊(cè)可直接使用等等,接下來介紹 script setup 語法糖具體使用以及與 setup() 函數(shù)的區(qū)別。

1、屬性和方法無需返回,可直接使用

setup() 來寫組合式 API 時(shí),內(nèi)部定義的屬性和方法,必須使用 return 暴露到上下文,外部才能夠使用,否則就會(huì)報(bào)錯(cuò),寫法為:

  1. <template> 
  2.  {{todoList}} 
  3. </template> 
  4. <script> 
  5. export default { 
  6.  setup(){ 
  7.   let todoList = [ 
  8.    {todo:"我想看海",isCheck:false}, 
  9.    {todo:"我想浪漫",isCheck:true}, 
  10.   ] 
  11.   return
  12.    todoList, 
  13.   } 
  14.  } 
  15. </script> 

使用 script setup 語法糖,不需要 return 和 setup函數(shù),只需要全部定義到 script setup 內(nèi)。

可以簡(jiǎn)化上述代碼為:

  1. <template> 
  2.  {{todoList}} 
  3. </template> 
  4. <script setup> 
  5.  let todoList = [ 
  6.   {todo:"我想看海",isCheck:false}, 
  7.   {todo:"我想浪漫",isCheck:true}, 
  8.  ] 
  9. </script> 

2、組件自動(dòng)注冊(cè)

在 script setup 語法糖中,引入的組件可以自動(dòng)注冊(cè),不需要再通過 components 進(jìn)行注冊(cè),而且無法指定當(dāng)前組件的名字,會(huì)自動(dòng)以文件名為主,省去了 name 屬性。

  1. <template> 
  2.  <SetUp></SetUp> 
  3.  <set-up></set-up> 
  4. </template> 
  5. <script setup> 
  6.  import SetUp from "./SetUp.vue" 
  7. </script> 

而在 setup() 寫的組合式 API 中,引入的組件必須在 components 內(nèi)注冊(cè)之后才能使用,否則無法正常引入。

3、組件數(shù)據(jù)傳遞

父組件給子組件傳值時(shí),需要 props 接收。setup( props, context )接收兩個(gè)參數(shù),props 接收傳遞的數(shù)據(jù),使用 setup() 接收數(shù)據(jù)如下:

  1. <template> 
  2.  {{ a }} {{ b }} 
  3. </template> 
  4.  
  5. <script> 
  6. import { toRefs } from "vue" 
  7. export default { 
  8.  setup(props,context){ 
  9.   const { a,b } = toRefs(props) 
  10.   return { 
  11.    a, 
  12.    b 
  13.   } 
  14.  } 
  15. </script> 

而 script setup 語法糖接收 props 中的數(shù)據(jù)時(shí),使用 defineProps 方法來獲取,可以修改上述代碼為:

  1. <template> 
  2.  {{ a }} {{ b }} 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { toRefs } from "vue" 
  7. const props = defineProps({ 
  8.   a: String, 
  9.   b: String 
  10. }) 
  11. const { a, b } = toRefs( props ) 
  12. </script> 

4、獲取 attrs、slots 和 emits

setup( props, context )接收兩個(gè)參數(shù),context 上下文環(huán)境,其中包含了屬性、插槽、自定義事件三部分。

setup() 內(nèi)獲取如下:

  1. setup(props,context){ 
  2.  const { attrs, slots, emit } = context 
  3.  // attrs 獲取組件傳遞過來的屬性值, 
  4.  // slots 組件內(nèi)的插槽 
  5.  // emit 自定義事件 子組件 

 使用 script setup 語法糖時(shí),

  • useAttrs 方法 獲取 attrs 屬性
  • useSlots 方法獲取 slots 插槽
  • defineEmits 方法獲取 emit 自定義事件
  1. <script setup> 
  2.  import { useAttrs, useSlots } from 'vue' 
  3.  const slots = useSlots(); 
  4.  const attrs = useAttrs(); 
  5.  
  6.  const emits = defineEmits(['getChild']); 
  7. </script> 

5、對(duì)外暴露屬性

script setup 語法糖的組件默認(rèn)不會(huì)對(duì)外暴露任何內(nèi)部聲明的屬性。如果有部分屬性要暴露出去,可以使用 defineExpose。

子組件暴露屬性:

  1. <template> 
  2.  {{msg}} 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { ref } from 'vue' 
  7.  
  8. let msg = ref("Child Components"); 
  9.  
  10. // defineExpose無需導(dǎo)入,直接使用 
  11. defineExpose({ 
  12.  msg 
  13. }); 
  14. </script> 

父組件引用子組件暴露的屬性:

  1. <template> 
  2.  <Child ref="child" /> 
  3. </template> 
  4.  
  5. <script setup> 
  6. import { ref, onMounted } from 'vue' 
  7. import Child from './components/Child.vue' 
  8.  
  9. let child = ref(null); 
  10.  
  11. onMounted(() => { 
  12.  console.log(child.value.msg); // Child Components 
  13.  console.log(child.value.num); // 123 
  14. }) 
  15. </script> 

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2023-04-27 11:07:24

Setup語法糖Vue3

2022-07-13 10:07:31

vue3組件監(jiān)聽器

2021-12-02 05:50:35

Vue3 插件Vue應(yīng)用

2022-02-18 09:39:51

Vue3.0Vue2.0Script Set

2024-03-15 08:45:31

Vue 3setup語法

2018-09-13 11:24:58

CPU

2021-11-30 08:19:43

Vue3 插件Vue應(yīng)用

2022-08-04 14:38:49

vue3.2setup代碼

2023-11-28 09:03:59

Vue.jsJavaScript

2021-11-16 08:50:29

Vue3 插件Vue應(yīng)用

2021-11-17 08:24:47

Vue3 插件Vue應(yīng)用

2021-12-29 07:51:21

Vue3 插件Vue應(yīng)用

2021-12-08 09:09:33

Vue 3 Computed Vue2

2023-12-11 07:34:37

Computed計(jì)算屬性Vue3

2023-12-14 08:25:14

WatchVue.js監(jiān)聽數(shù)據(jù)

2023-11-29 08:49:31

Vue.jsData 函數(shù)

2022-02-08 13:39:35

LinuxUNIX系統(tǒng)

2021-05-24 08:04:03

script setuVue Vue 3
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 喷潮网站| 日本精品视频 | 成人免费在线网 | 97伦理电影网 | 欧美二区三区 | 国产精品麻 | 国产午夜精品一区二区三区嫩草 | 91精品国产91久久久久久吃药 | 在线小视频 | 国产露脸对白88av | 国产精品成人在线 | 一区二区日韩 | 日韩精品一区二区三区在线观看 | 日韩精品 电影一区 亚洲 | 欧美片网站免费 | 国产精品一区二区三区在线 | 亚洲精品粉嫩美女一区 | 国产999精品久久久久久 | 99久久久久| av日日操 | 涩涩视频在线观看免费 | 亚洲色欧美另类 | 99久久精品国产一区二区三区 | 国产精品综合色区在线观看 | 成年男女免费视频网站 | 色综合激情 | 国产精品成人免费 | 69福利影院| 日韩中文字幕视频 | 久久久久无码国产精品一区 | 日本中文字幕一区 | av香港经典三级级 在线 | 一级中国毛片 | 成人在线| 麻豆hd| 天天干天天爱天天 | 午夜精品久久久久久久久久久久久 | 特级a欧美做爰片毛片 | 91精品久久久久久久久 | 久久久久久久久久久久一区二区 | 国产成人精品午夜 |