vue3基礎

一眯杏、setup

  1. setup函數(shù)可以被理解為函數(shù)的入口
  2. setup函數(shù)接收兩個參數(shù):props匾乓、context(包含attrs录煤、slots鳄厌、emit)
  3. setup函數(shù)是處于生命周期函數(shù) beforeCreate之前執(zhí)行,執(zhí)行setup函數(shù)時組件實例并未被創(chuàng)建妈踊,this不指向vue實例
  4. 與模板一起使用:須在refreactive中聲明然后return出去使用才是響應式的
  5. 使用渲染函數(shù):可以返回一個渲染函數(shù)了嚎,該函數(shù)可以直接使用在同一作用域中聲明的響應式狀態(tài)

二、setup第一個參數(shù)props

props 是響應式的,當傳入新的 prop 時歪泳,它將被更新萝勤。

export default {
  props: {
    title: String
  },
  setup(props) {
    console.log(props.title)
  }
}

因為 props 是響應式的,不能使用 ES6 解構呐伞,會消除 prop 的響應性敌卓。
如果需要解構 prop,可以在 setup 函數(shù)中使用 [toRefs]函數(shù)來完成此操作:

setup(props) {
  const { title } = toRefs(props)
  return{ title  }
}

三伶氢、setup第二個參數(shù)context

context 是一個普通 JavaScript 對象趟径,暴露了其它可能在 setup 中有用的值

setup(props, context) {
    // Attribute (非響應式對象,等同于 $attrs)
    console.log(context.attrs)

    // 插槽 (非響應式對象癣防,等同于 $slots)
    console.log(context.slots)

    // 觸發(fā)事件 (方法蜗巧,等同于 $emit)
    console.log(context.emit)

    // 暴露公共 property (函數(shù))
    console.log(context.expose)
  }

context不是響應的,可以用ES6進行解構

  setup(props, { attrs, slots, emit, expose }) {
    ...
  }

四蕾盯、ref

引入

import { ref } from "vue";
setup(){
    const arr = ref(["小美", "小紅", "小藍", "小綠"]);
    const str = ref("1小美");
    const onBtn = function(index: number) {
          str.value = index + 1 + arr.value[index];
      };
    return { arr, onBtn, str };
}

注意:ref引入的值需要使用.value才能拿到
使用

<template>
  <button v-for="(item, index) in arr" :key="index" @click="onBtn(index)">
    {{ index + 1 }}:{{ item }}
  </button>
  <div>您點擊了:{{ str }}</div>
  <button @click="complete">完成</button>
</template>

五惧蛹、reactive

reactiveref的作用差不多,都是引入響應式數(shù)據(jù)刑枝,但是reactive看起來結(jié)構更加清晰

import { reactive} from "vue";

const obj: type = reactive({
      arr: ["小美", "小紅", "小藍", "小綠"],
      str: "",
      onBtn: (index): void => {
        obj.str = index + 1 + obj.arr[index];
      }
    });
const obj1 = toRefs(obj);
return { ...obj1 };
    // 未使用toRefs時,不能用ES6結(jié)構 老老實實寫obj.arr...

其實在工作上為了嚴謹不能讓TS自己猜類型迅腔,需要定義類型

  interface type {
      arr: Array<string>;
      str: string;
      //   onBtn: (index: number):void => {};錯誤寫法
      onBtn: (index: number) => void
    }

六装畅、watch

1、監(jiān)聽ref的值

const xxx = ref("")

watch(xxx, (newV, oldV) => {
    console.log(newV, oldV, 88);
});

2沧烈、監(jiān)聽reactive的值

const obj= reactive({
 str: "",
})
watch(() => obj.str, (newV, oldV) => {});

原因:vue無法監(jiān)聽對象內(nèi)部的值掠兄,需要將值return出去監(jiān)聽
3、監(jiān)聽多個值

watch([xxx,() => obj.str], (newV, oldV) => {
  console.log(newV[0],newV[1])
  console.log(oldV[0],oldV[1])
});

七锌雀、 vue3的生命周期鉤子

setup里的生命周期鉤子蚂夕,同級別中比vue2的先執(zhí)行

onBeforeMount(() => {});
image.png

八、調(diào)試API

// 主要用于調(diào)試 打出全部的值
 onRenderTracked(event => {
    console.log(event);
 });

// 主要用于調(diào)試 打出變化的新舊值
onRenderTriggered(event => {
    console.log(event);
});

九腋逆、模塊化

一個簡單的模塊化的時間

<template>
  <button @click="tiemf">開始</button>
  <div>{{ time }}</div>
</template>
<script lang="ts">
import { time, tiemf } from "./useTs";
export default {
  setup() {
    return { time, tiemf };
  }
};
</script>
import { ref } from "vue";

const time = ref("00:00:00")
const tiemf = () =>{
  setInterval(() => {
      const hour = new Date().getHours();
      const minute = new Date().getMinutes();
      const sec = new Date().getSeconds();
      time.value = hour + ":" + minute + ":" +sec;
    }, 1000);
}
 
export  {time,tiemf}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婿牍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惩歉,更是在濱河造成了極大的恐慌等脂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撑蚌,死亡現(xiàn)場離奇詭異上遥,居然都是意外死亡,警方通過查閱死者的電腦和手機争涌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門粉楚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事模软∥肮牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵撵摆,是天一觀的道長底靠。 經(jīng)常有香客問我,道長特铝,這世上最難降的妖魔是什么暑中? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鲫剿,結(jié)果婚禮上鳄逾,老公的妹妹穿的比我還像新娘。我一直安慰自己灵莲,他們只是感情好雕凹,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著政冻,像睡著了一般枚抵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上明场,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天汽摹,我揣著相機與錄音,去河邊找鬼苦锨。 笑死逼泣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的舟舒。 我是一名探鬼主播拉庶,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秃励!你這毒婦竟也來了氏仗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夺鲜,失蹤者是張志新(化名)和其女友劉穎廓鞠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谣旁,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡床佳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榄审。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砌们。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浪感,到底是詐尸還是另有隱情昔头,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布影兽,位于F島的核電站揭斧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏峻堰。R本人自食惡果不足惜讹开,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捐名。 院中可真熱鬧旦万,春花似錦、人聲如沸镶蹋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贺归。三九已至淆两,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拂酣,已是汗流浹背秋冰。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踱葛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓光坝,卻偏偏與公主長得像尸诽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盯另,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容