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

这篇具有很好参考价值的文章主要介绍了[GN] Vue3.2 快速上手 ---- 核心语法2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


标签的 ref 属性

  • 用在普通DOM标签上,获取的是DOM节点。
  • 用在组件标签上,获取的是组件实例对象。
  1. 用在普通DOM标签上:
<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')
    // 打印内容
    console.log(t1?.innerText) //获取的是`DOM`节点。
    // 通过ref获取元素
    console.log(title.value)
  }
</script>
  1. 用在组件标签上:
    • 父组件App使用子组件Person
    • Person组件标签上使用ref 可以获取组件实例
    • 但需要子组件代码中 使用defineExpose暴露内容
<!-- 父组件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暴露内容 -->
<script lang="ts" setup name="Person">
  import {ref,defineExpose} from 'vue'
	// 数据
  let name = ref('张三')
  let age = ref(18)

  // 使用defineExpose将组件中的数据交给外部
  defineExpose({name,age})
</script>

props

  • App.vue是父组件,Person是子组件
  • 父组件中 使用子组件 < Person :list=“persons” /> 。并给子组件传送list值
  • 父中定义了发送对象格式 子中也可定义接受格式
  • 详见下方代码

新建文件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类型的数据 <>是数组
  	{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}>()

// 第三种写法:接收+限制类型+指定默认值+限制必要性
let props = withDefaults(defineProps<{list?:Persons}>(),{
  list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]
})
console.log(props)
</script>

生命周期

Vue3的生命周期

创建阶段:setup

挂载阶段:onBeforeMountonMounted

更新阶段:onBeforeUpdateonUpdated

卸载阶段:onBeforeUnmountonUnmounted

常用的钩子:onMounted(挂载完毕)、onUpdated(更新完毕)、onBeforeUnmount(卸载之前)

自定义hook

  • hook—— 本质是一个函数,把setup函数中使用的Composition API进行了封装

  • 自定义hook的优势:复用代码, 让setup中的逻辑更清楚易懂。

useSum.ts中内容如下:

import {ref,onMounted} from 'vue'

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

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

  //向外部暴露数据
  return {sum,increment}
}		

-useDog.ts中内容如下:

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

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

  // 方法
  async function getDog(){
      // 发请求
      let {data} = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')
      // 维护数据
      dogList.push(data.message)
  }

  //向外部暴露数据
  return {dogList,getDog}
}

-组件中具体使用:

<template>
  <h2>当前求和为:{{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() //直接调用
  let {dogList,getDog} = useDog()
</script>

总结

下一篇将会更新vue3.0核心语法最后篇章 — 路由部分!!文章来源地址https://www.toymoban.com/news/detail-811732.html

到了这里,关于[GN] Vue3.2 快速上手 ---- 核心语法2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    表格形式更加直观吧: 项目 ref reactive 是否支持基本类型 支持 不支持 是否支持对象类型 支持 支持 对象类型是否支持属性直接赋值 不支持,需要.value 支持 是否支持直接重新分配对象 支持,因为操作的.value 不支持,需要使用object.assign()方法 是否支持基本类型 支持 不支持

    2024年02月19日
    浏览(44)
  • vue3探索——5分钟快速上手大菠萝pinia

    温馨提示:本文以vue3+vite+ts举例,vite配置和ts语法侧重较少,比较适合有vuex或者vue基础的小伙伴们儿查阅。 yarn npm pnpm 在 src/main.ts 中引入pinia(根存储),并传递给应用程序。 在根目录下新建文件夹,这里我命名为 store ,再在文件夹下新建一个 index.ts 文件( src/store/index.ts

    2024年02月09日
    浏览(39)
  • Vue3快速上手(八) toRefs和toRef的用法

    顾名思义,toRef 就是将其转换为ref的一种实现。详细请看: toRef就相当于是将对象Person里的某个属性,如name,单独解构赋值给name,并使得name同为响应式对象。且修改name的值时,person.name的值随之变化。 如下图可以看到: 1、name是一个ObjectRefImpl对象的实例。 2、底层还是个P

    2024年02月19日
    浏览(41)
  • GN快速上手

    最近在研究鸿蒙操作系统的开源项目OpenHarmony,该项目使用了GN+Ninja工具链进行配置,编译,于是开始研究GN如何使用。 本文的所有信息均来自GN官网和本人个人体会。 GN的主要功能是根据配置文件(.gn, BUILD.gn等)生成build.ninja文件。build.ninja类似于Makefile,不同的是由Ninja负责

    2024年02月13日
    浏览(43)
  • [GN] 使用vue3+vite+ts+prettier+eslint

    做到代码格式等统一,此时,esint和prettier就要登场了。 eslint是代码检测工具,可以检测出你代码中潜在的问题,比如使用了某个变量却忘记了定义。 prettier是代码格式化工具,作为代码格式化工具,能够统一你或者你的团队的代码风格。 = 安装prettier+eslint包,并做一系列的

    2024年01月16日
    浏览(59)
  • Vue3安装pixi.js 项目无法识别 ?. 语法,导致报错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日
    浏览(41)
  • vue3创建项目报错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日
    浏览(163)
  • 【Vue】快速上手--Vue 3.0

    Vue (发音为 /vjuː/,类似  view ) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 下面是一个最基本的示例: js template 结

    2024年02月10日
    浏览(30)
  • 【Vue】二:Vue核心处理---模板语法

    {{可以写什么}} (1)在data中声明的变量,函数 (2)常量 (3)合法的javascript表达式 (4)模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如Math, Date Vue中所有指令都是以HTML标签当中的属性存在的。 (1)指令的位置 (2)指令的语法规则 v-标签名:参数=“表达

    2024年02月06日
    浏览(35)
  • Vue核心语法

    我们以前都是用的框架来搭建的,省去了很多内容,今天我们从原始的方式来使用vue,下面是下载地址 未使用响应式 我们把注释去掉 从上面的演示可以看到,没有用响应式的时候,如果我们要变更元素,需要处理数据的逻辑,还需要再次操作一下DOM,很繁琐 let、var、const

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包