国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[GN] Vue3.2 快速上手 ---- 核心語法2

這篇具有很好參考價值的文章主要介紹了[GN] Vue3.2 快速上手 ---- 核心語法2。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


標(biāo)簽的 ref 屬性

  • 用在普通DOM標(biāo)簽上,獲取的是DOM節(jié)點。
  • 用在組件標(biāo)簽上,獲取的是組件實例對象。
  1. 用在普通DOM標(biāo)簽上:
<template>
  <div class="person">
    <h3 ref="title">Vue</h3>
    <button @click="showLog">點我打印</button>
  </div>
</template>

<script lang="ts" setup name="Person">

  import {ref} from 'vue'
  let title = ref()

  function showLog(){
    // 通過id獲取元素
    const t1 = document.getElementById('title')
    // 打印內(nèi)容
    console.log(t1?.innerText) //獲取的是`DOM`節(jié)點。
    // 通過ref獲取元素
    console.log(title.value)
  }
</script>
  1. 用在組件標(biāo)簽上:
    • 父組件App使用子組件Person
    • Person組件標(biāo)簽上使用ref 可以獲取組件實例
    • 但需要子組件代碼中 使用defineExpose暴露內(nèi)容
<!-- 父組件App.vue -->
<template>
  <Person ref="ren"/>
  <button @click="test">測試</button>
</template>

<script lang="ts" setup name="App">
  import Person from './components/Person.vue'
  import {ref} from 'vue'

  let ren = ref()

  function test(){
    console.log(ren.value.name)
    console.log(ren.value.age)
  }
</script>


<!-- 子組件Person.vue中要使用defineExpose暴露內(nèi)容 -->
<script lang="ts" setup name="Person">
  import {ref,defineExpose} from 'vue'
	// 數(shù)據(jù)
  let name = ref('張三')
  let age = ref(18)

  // 使用defineExpose將組件中的數(shù)據(jù)交給外部
  defineExpose({name,age})
</script>

props

  • App.vue是父組件,Person是子組件
  • 父組件中 使用子組件 < Person :list=“persons” /> 。并給子組件傳送list值
  • 父中定義了發(fā)送對象格式 子中也可定義接受格式
  • 詳見下方代碼

新建文件type.ts定義接口

// 定義一個接口,限制每個Person對象的格式
export interface PersonInter {
	id:string,
	name:string,
	age:number
}

// 定義一個自定義類型Persons
export type Persons = Array<PersonInter>

App.vue

<template>
	<Person :list="persons"/>
</template>

<script lang="ts" setup name="App">
import Person from './components/Person.vue'
import {reactive} from 'vue'
import {type Persons} from './types'  

 let persons = reactive<Persons>([ //Persons類型的數(shù)據(jù) <>是數(shù)組
  	{id:'e98219e12',name:'張三',age:18},
    {id:'e98219e13',name:'李四',age:19},
    {id:'e98219e14',name:'王五',age:20}
  ])
</script>

Person.vue中:

<template>
<div class="person">
<ul>
  <li v-for="item in list" :key="item.id">
     {{item.name}}--{{item.age}}
   </li>
 </ul>
</div>
</template>

<script lang="ts" setup name="Person">
import {defineProps} from 'vue'
import {type Persons} from '@/types'

// 第一種寫法:僅接收
// const props = defineProps(['list'])

// 第二種寫法:接收+限制類型
// defineProps<{list:Persons}>()

// 第三種寫法:接收+限制類型+指定默認(rèn)值+限制必要性
let props = withDefaults(defineProps<{list?:Persons}>(),{
  list:()=>[{id:'asdasg01',name:'小豬佩奇',age:18}]
})
console.log(props)
</script>

生命周期

Vue3的生命周期

創(chuàng)建階段:setup

掛載階段:onBeforeMount、onMounted

更新階段:onBeforeUpdate、onUpdated

卸載階段:onBeforeUnmountonUnmounted

常用的鉤子:onMounted(掛載完畢)、onUpdated(更新完畢)、onBeforeUnmount(卸載之前)

自定義hook

  • hook—— 本質(zhì)是一個函數(shù),把setup函數(shù)中使用的Composition API進(jìn)行了封裝

  • 自定義hook的優(yōu)勢:復(fù)用代碼, 讓setup中的邏輯更清楚易懂。

useSum.ts中內(nèi)容如下:

import {ref,onMounted} from 'vue'

export default function(){
  let sum = ref(0)

  const increment = ()=>{
    sum.value += 1
  }

  //向外部暴露數(shù)據(jù)
  return {sum,increment}
}		

-useDog.ts中內(nèi)容如下:

import {reactive,onMounted} from 'vue'
import axios,{AxiosError} from 'axios'

export default function(){
  let dogList = reactive<string[]>([])

  // 方法
  async function getDog(){
      // 發(fā)請求
      let {data} = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')
      // 維護(hù)數(shù)據(jù)
      dogList.push(data.message)
  }

  //向外部暴露數(shù)據(jù)
  return {dogList,getDog}
}

-組件中具體使用:

<template>
  <h2>當(dāng)前求和為:{{sum}}</h2>
  <button @click="increment">點我+1</button>
  <hr>
  <img v-for="(u,index) in dogList.urlList" :key="index" :src="(u as string)"> 
  <span v-show="dogList.isLoading">加載中......</span><br>
  <button @click="getDog">再來一只狗</button>
</template>

<script setup lang="ts">
  import useSum from './hooks/useSum' // 引入hook
  import useDog from './hooks/useDog'
	
  let {sum,increment,decrement} = useSum() //直接調(diào)用
  let {dogList,getDog} = useDog()
</script>

總結(jié)

下一篇將會更新vue3.0核心語法最后篇章 — 路由部分?。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-811732.html

到了這里,關(guān)于[GN] Vue3.2 快速上手 ---- 核心語法2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Vue3快速上手(七) ref和reactive對比

    Vue3快速上手(七) ref和reactive對比

    表格形式更加直觀吧: 項目 ref reactive 是否支持基本類型 支持 不支持 是否支持對象類型 支持 支持 對象類型是否支持屬性直接賦值 不支持,需要.value 支持 是否支持直接重新分配對象 支持,因為操作的.value 不支持,需要使用object.assign()方法 是否支持基本類型 支持 不支持

    2024年02月19日
    瀏覽(32)
  • vue3探索——5分鐘快速上手大菠蘿pinia

    vue3探索——5分鐘快速上手大菠蘿pinia

    溫馨提示:本文以vue3+vite+ts舉例,vite配置和ts語法側(cè)重較少,比較適合有vuex或者vue基礎(chǔ)的小伙伴們兒查閱。 yarn npm pnpm 在 src/main.ts 中引入pinia(根存儲),并傳遞給應(yīng)用程序。 在根目錄下新建文件夾,這里我命名為 store ,再在文件夾下新建一個 index.ts 文件( src/store/index.ts

    2024年02月09日
    瀏覽(41)
  • Vue3快速上手(八) toRefs和toRef的用法

    Vue3快速上手(八) toRefs和toRef的用法

    顧名思義,toRef 就是將其轉(zhuǎn)換為ref的一種實現(xiàn)。詳細(xì)請看: toRef就相當(dāng)于是將對象Person里的某個屬性,如name,單獨解構(gòu)賦值給name,并使得name同為響應(yīng)式對象。且修改name的值時,person.name的值隨之變化。 如下圖可以看到: 1、name是一個ObjectRefImpl對象的實例。 2、底層還是個P

    2024年02月19日
    瀏覽(25)
  • GN快速上手

    最近在研究鴻蒙操作系統(tǒng)的開源項目OpenHarmony,該項目使用了GN+Ninja工具鏈進(jìn)行配置,編譯,于是開始研究GN如何使用。 本文的所有信息均來自GN官網(wǎng)和本人個人體會。 GN的主要功能是根據(jù)配置文件(.gn, BUILD.gn等)生成build.ninja文件。build.ninja類似于Makefile,不同的是由Ninja負(fù)責(zé)

    2024年02月13日
    瀏覽(22)
  • [GN] 使用vue3+vite+ts+prettier+eslint

    做到代碼格式等統(tǒng)一,此時,esint和prettier就要登場了。 eslint是代碼檢測工具,可以檢測出你代碼中潛在的問題,比如使用了某個變量卻忘記了定義。 prettier是代碼格式化工具,作為代碼格式化工具,能夠統(tǒng)一你或者你的團(tuán)隊的代碼風(fēng)格。 = 安裝prettier+eslint包,并做一系列的

    2024年01月16日
    瀏覽(26)
  • Vue3安裝pixi.js 項目無法識別 ?. 語法,導(dǎo)致報錯Module parse failed: Unexpected token

    ?error ?in ./node_modules/@pixi/assets/lib/resolver/parsers/resolveTextureUrl.mjs Module parse failed: Unexpected token (9:62) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | ? test: loadTextures.test, | ? parse: (value) = ({ ? ? resolut

    2024年02月11日
    瀏覽(36)
  • vue3創(chuàng)建項目報錯Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_ut

    vue3創(chuàng)建項目報錯Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_ut

    報錯信息: Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_util.parseArgs) is not a function ? ? at init (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_modulescreate-vueoutfile.cjs:4481:72) ? ? at Object.anonymous (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_module

    2024年04月10日
    瀏覽(124)
  • 【Vue】快速上手--Vue 3.0

    Vue (發(fā)音為 /vju?/,類似? view ) 是一款用于構(gòu)建用戶界面的 JavaScript 框架。它基于標(biāo)準(zhǔn) HTML、CSS 和 JavaScript 構(gòu)建,并提供了一套聲明式的、組件化的編程模型,幫助你高效地開發(fā)用戶界面。無論是簡單還是復(fù)雜的界面,Vue 都可以勝任。 下面是一個最基本的示例: js template 結(jié)

    2024年02月10日
    瀏覽(19)
  • 【Vue】二:Vue核心處理---模板語法

    【Vue】二:Vue核心處理---模板語法

    {{可以寫什么}} (1)在data中聲明的變量,函數(shù) (2)常量 (3)合法的javascript表達(dá)式 (4)模板表達(dá)式都被放在沙盒中,只能訪問全局變量的一個白名單,如Math, Date Vue中所有指令都是以HTML標(biāo)簽當(dāng)中的屬性存在的。 (1)指令的位置 (2)指令的語法規(guī)則 v-標(biāo)簽名:參數(shù)=“表達(dá)

    2024年02月06日
    瀏覽(25)
  • Vue核心語法

    Vue核心語法

    我們以前都是用的框架來搭建的,省去了很多內(nèi)容,今天我們從原始的方式來使用vue,下面是下載地址 未使用響應(yīng)式 我們把注釋去掉 從上面的演示可以看到,沒有用響應(yīng)式的時候,如果我們要變更元素,需要處理數(shù)據(jù)的邏輯,還需要再次操作一下DOM,很繁瑣 let、var、const

    2024年02月12日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包