Vue3基礎(chǔ)_2021-12-20

setup.png
setup2.png

ref.png

reactive+computed+watch.png

parent component

<template>
  <h1>{{num}}</h1>
  <child :msg="msg" msg2="welcome to vue+ts" @show="show"></child>
  <hr>
  <button @click="updateCount">按鈕</button>
  <h1>{{count}}</h1>
  <hr>
  <input type="text" placeholder="請(qǐng)輸入內(nèi)容" ref="inputRef">
  <hr>
  <h3>姓名: {{user.name}}</h3>
  <h3>年齡: {{user.age}}</h3>
  <h3>books: {{user.books}}</h3>
  <button @click="updateUser">更新</button>
  <h2>{{fullName1}}</h2>
</template>
<script lang="ts">
import { defineComponent, ref, onMounted, reactive, computed, watch, onBeforeMount, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue'
import Child from './Child.vue'

export default defineComponent({
  beforeCreate () {
    console.log('beforeCreate執(zhí)行了')
  },
  setup () {
    console.log('setup執(zhí)行了')
    const num = 18
    const msg = ref('hello, vue3')
    const show = () => {
      console.log('name:', 'hua')
    }
    const count = ref(0)
    function updateCount () {
      count.value++
    }
    const inputRef = ref<HTMLElement|null>(null)
    onBeforeMount(() => {
      console.log('--onBeforeMount')
    })
    onMounted(() => {
      console.log('onMounted執(zhí)行了')
      console.log(inputRef)
      inputRef.value && inputRef.value.focus()
    })
    onBeforeUpdate(() => {
      console.log('--onBeforeUpdate')
    })
    onUpdated(() => {
      console.log('--onUpdated')
    })
    onBeforeUnmount(() => {
      console.log('--onBeforeUnmount')
    })
    onUnmounted(() => {
      console.log('--onUnmounted')
    })
    const user = reactive({
      name: 'hello, flower',
      age: 18,
      books: ['紅寶書', '設(shè)計(jì)模式', '算法與數(shù)據(jù)結(jié)構(gòu)'],
      firstName: '張',
      lastName: 'Susan'
    })
    const updateUser = () => {
      user.name = '小紅'
      user.age += 2
      user.books[0] = 'javascript'
    }
    const fullName1 = computed(() => {
      return user.firstName + user.lastName
    })
    const fullName2 = computed({
      get () {
        return user.firstName + '_' + user.lastName
      },
      set (val: string) {
        const names = val.split('_')
        user.firstName = names[0]
        user.lastName = names[1]
      }
    })
    const fullName3 = ref('')
    watch(
      user,
      ({ firstName, lastName }) => {
        fullName3.value = firstName + '_' + lastName
      },
      { immediate: true, deep: true }
    )
    return {
      num,
      msg,
      show,
      count,
      updateCount,
      inputRef,
      user,
      updateUser,
      fullName1,
      fullName2
    }
  },
  components: {
    Child
  }
})
</script>
<style scoped>

</style>



child component

<template>
  <div @click="emitFn">我是子組件{{msg}}</div>
</template>
<script>
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'Child',
  props: ['msg'],
  setup (props, { attrs, emit }) {
    console.log(props)// {msg:'hello, vue3'}
    console.log(attrs)// {msg2:'welcome to vue+ts', __vInternal: 1}
    const emitFn = () => {
      emit('show')
    }
    return {
      emitFn
    }
  }
})
</script>
<style scoped>

</style>
https://juejin.cn/post/6977004323742220319

script setup語(yǔ)法糖

<script setup>
import { defineComponent, defineProps, useAttrs, useSlots, defineExpose } from 'vue'
import Child from './Child.vue'
// 通過(guò)defineProps指定當(dāng)前props類型隐解,獲得上下文的props對(duì)象
const props = defineProps({
  title: String
})
// 使用defineEmit定義當(dāng)前組件含有的事件,并通過(guò)返回的上下午去執(zhí)行emit

// 可以通過(guò)useContext從上下文中獲取slots和attrs,不過(guò)提案在正式通過(guò)后帕涌,廢除了這個(gè)語(yǔ)法
// 被拆成了useAttrs和useSlots
const emit = defineEmits(['change', 'delete'])
const attrs = useAttrs()
const slots = useSlots()

// defineExpose API
// 傳統(tǒng)的寫法续徽,我們可以在父組件中,通過(guò)ref實(shí)例的方式去訪問(wèn)子組件的內(nèi)容钦扭,
// 但在script setup中,該方法就不能用了其弊,setup相當(dāng)于是一個(gè)閉包,除了內(nèi)部的template模板
// 誰(shuí)都不能訪問(wèn)內(nèi)部的數(shù)據(jù)和方法
const a = 1
const b = 2
defineExpose({
  a,
  ba
})
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梭伐,一起剝皮案震驚了整個(gè)濱河市仰担,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌技掏,老刑警劉巖项鬼,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绘盟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吠卷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沦零,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人路操,你說(shuō)我怎么就攤上這事千贯「惆樱” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵敦第,是天一觀的道長(zhǎng)店量。 經(jīng)常有香客問(wèn)我,道長(zhǎng)垫桂,這世上最難降的妖魔是什么粟按? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮疼鸟,結(jié)果婚禮上庙曙,老公的妹妹穿的比我還像新娘。我一直安慰自己捌朴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布洼怔。 她就那樣靜靜地躺著左驾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诡右。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天域那,我揣著相機(jī)與錄音,去河邊找鬼次员。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翠肘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播被丧,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼绪妹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了邮旷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤办陷,失蹤者是張志新(化名)和其女友劉穎律歼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體险毁,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年鲸鹦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跷跪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嵌戈,死狀恐怖听皿,靈堂內(nèi)的尸體忽然破棺而出熟呛,到底是詐尸還是另有隱情尉姨,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布九府,位于F島的核電站,受9級(jí)特大地震影響侄旬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜儡羔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一汰蜘、第九天 我趴在偏房一處隱蔽的房頂上張望仇冯。 院中可真熱鬧族操,春花似錦、人聲如沸色难。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)依沮。三九已至枪狂,卻和暖如春危喉,著一層夾襖步出監(jiān)牢的瞬間州疾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工薄嫡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颗胡,地道東北人毫深。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓哑蔫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闸迷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嵌纲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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