首页 > 其他分享 >vue3.2入门

vue3.2入门

时间:2023-04-15 14:36:55浏览次数:46  
标签:const 入门 reactive type value vue3.2 job ref

vue3.2 版本开始可以使用语法糖!对于从2.0过来的人我就直接看3.2的语法了

helloworld.vue

<!-- 
setup语法糖
vue3.0的变量需要return出来才可以在template中使用, 写法冗余

vue3.2 在script标签中添加setup解决问题
组件只需要引入,不需要注册,属性方法不需要返回,不需要写setup函数,不需要写export default -->
<script setup lang="ts">
import { ref ,reactive,computed,watch,onMounted} from 'vue'
//接收组件参数 方法一
defineProps<{ msg: string }>()
// 基础类型数据推荐适用ref函数,引用类型数据推荐适用reactive函数
const count = ref(0)
const job2 = ref({
  name:"张三",
  type: '前端工程师',
  salary: '20K'
})
const job = reactive({
    name:"张三",
    type: '前端工程师',
    salary: '20K',
    msg:{
      height:'180cm',
      weight:"70kg"
    }

})

const watchString = ref('测试watch的字符串')

/*************************ref定义基本数据类型****************/ 
// 普通方法
function addcount(){
  count.value++
  console.log(count)
}
// es6方法
const setcount = () => {
  count.value--
}
/************************reactive 定义引用数据类型**********/ 
const reffun=()=>{
  job2.value.type="Java工程师"
}
const reactivefun=()=>{
  job.type="php工程师"
}
/*************************computed计算属性*****************/  
const nameString = computed(() => {
    return '我的name是' + job.name
})
/*************************watch使用************************/  
//监听基本数据类型 ref
watch(count,(newVal,oldVal)=>{
    console.log('变量发生了改变...',newVal, oldVal);
    watchString.value='新:'+newVal+"----旧:"+oldVal
})
//监听引用数据类型 reactive
watch(()=>job.type,(newVal,oldVal)=>{
    console.log('变量发生了改变...',newVal, oldVal);
    watchString.value='新:'+newVal+"----旧:"+oldVal
})
//监听引用数据类型 reactive多数据源[深度监听]
watch(()=>job.msg.height,(newVal,oldVal)=>{
    console.log('变量发生了改变...',newVal, oldVal);
    watchString.value='新:'+newVal+"----旧:"+oldVal
}, {deep:true})
const changeheight=()=>{
  job.msg.height="190cm"
}
/*************************生命周期************************/ 
onMounted(()=>{
  console.log("和vue2一样,生命周期名称前面加个on,没有beforeCreate和created")
})
//setup里 直接调用相当于以前的 beforeCreate和created
addcount()
/***********************over********************************/ 
</script>

<template>
  <h1>{{ msg }}</h1>
  <h2>{{count}}</h2>
  <button @click="addcount">+</button>
  <button @click="setcount">-</button>
  <p>
    {{ job.salary }}--{{ job.type }}
    <button @click="reffun">ref 无效</button>
    <button @click="reactivefun">reactive 有效</button>
  </p>
  <p>{{ nameString }}</p>
  <button @click="changeheight">深度监听</button>
  <p>{{watchString}}</p>
</template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>

mychild.vue

<!-- 进阶组件传参 -->
<script setup lang="ts">
import { ref ,reactive,toRefs,defineEmits } from 'vue'
//接收组件参数 方法二  
const props = defineProps({
    msg: {
      type: String,
      default: '11'
    },
    job:{
        type:Object
    }
}) 
const emit = defineEmits(['changmsg'])
const changefather=()=>{
    console.log("哈哈")
    emit('changmsg',"哈哈");
}
const flag = ref(true) 
// defineExpose({flag}) //基础类型数据暴露ref内容

// 获取子组件ref变量和defineExpose暴露
const info = reactive({
    name:"woods",
    type: '高级前端工程师',
    salary: '30K',
   
})
//定义引用数据类型 暴露内容
defineExpose({
  ...toRefs(info),
  flag,
  changefather
})

</script>

<template>
  <h4 v-if="flag">{{ msg }}{{ job }} </h4>
    <h4>mychild组件自己的变量:{{info.name  }}</h4>
 <button @click="changefather">changefather</button>
</template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>

 app.vue

<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
import MyChild from "./components/MyChild.vue"
import {ref,reactive } from "vue"
const msg=ref("父组件变量")
const job = reactive({
    name:"张三",
    type: '前端工程师',
    salary: '20K',
})
const changmsgfather=(val:String)=>{
  console.log(666)
  msg.value="我是被子组件修改的。还传了个参数:"+val
}
const mychild=ref()
const changeref=()=>{
  mychild.value.flag=!mychild.value.flag //子组件变量
  mychild.value.name="hahaha!" //不要写成 mychild.value.info,在子组件已经解构了
  mychild.value.changefather()  //子组件方法
}
</script>

<template>
  <div>
    <a href="https://vitejs.dev" target="_blank">
      <img src="/vite.svg" class="logo" alt="Vite logo" />
    </a>
    <a href="https://vuejs.org/" target="_blank">
      <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
    </a>
  </div>
  <!-- 3.2直接引入组件,无需注册 -->
  <HelloWorld msg="Vite + Vue" />
  <!--  -->
  <h2>{{ msg }}</h2>
  <MyChild :msg="msg" :job="job" @changmsg="changmsgfather" ref="mychild" ></MyChild>
  <div>
    <button @click="changeref">使用ref修改</button>
  </div>
</template>

<style scoped>
.logo {
  height: 6em;
  padding: 1.5em;
  will-change: filter;
  transition: filter 300ms;
}
.logo:hover {
  filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

 

标签:const,入门,reactive,type,value,vue3.2,job,ref
From: https://www.cnblogs.com/shangrao/p/17321075.html

相关文章

  • Semantic Kernel 入门系列:
    当我们使用NativeFunction的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果。这一过程在SemanticKernel中可以被归类为Connector。Connector更像是一种设计模式,并不像Function和Memory一样有强制和明确......
  • C++ 测试框架 GoogleTest 初学者入门篇 丙
    theme:channing-cyan*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRnoHVf0sloeg开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的......
  • java入门
    JDK:JavaDevelopmentKit(Java 集成开发工具)按应用平台划分:J2EE: Java2EnterpriseEdition 可扩展的企业级应用J2SE: Java2StandardEdition 用于工作丫和PC机的Java标准平台J2ME:Java2MicroEdition用于嵌入式消费电子平台按运行的操作系统划分:JDK分别有f......
  • MySQL存储过程入门使用
    一、存储过程概述存储过程的英文是StoredProcedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行......
  • Python入门基础实例讲解——两个数字比大小,并输出最大值
    嗨害大家好鸭!我是小熊猫~今天也是给大家带来干货的一天~pycharm永久激活码可以从这里找到我:输出:print()print()方法用于打印输出,最常见的一个函数。比较运算符>:大于,如果运算符前面的值大于后面的值,则返回True;否则返回False<:小于,如果运算符前面的值小于后面的值,则返回True;否......
  • odoo 开发入门教程系列-继承(Inheritance)
    继承(Inheritance)Odoo的一个强大方面是它的模块化。模块专用于业务需求,但模块也可以相互交互。这对于扩展现有模块的功能非常有用。例如,在我们的房地产场景中,我们希望在常规用户视图中直接显示销售人员的财产列表。在介绍特定的Odoo模块继承之前,让我们看看如何更改标准CRUD(创建......
  • Nvidia Tensor Core-MMA PTX编程入门
    1PTX(ParallelThreadExecution)PTX是什么,Nvidia官方描述为alow-levelparallelthreadexecutionvirtualmachineandinstructionsetarchitecture(ISA),直面意思是低级并行线程执行虚拟机和指令集架构。怎么理解其直面意思,有两个方法。一个方法是借鉴LLVM,熟悉LLV......
  • django入门学习
    一、创建项目django-adminstartprojecttest1查看项目目录结构cdtest1tree test1:项目的容器。manage.py:一个实用的命令行工具,可让你以各种方式与该Django项目进行交互。test1/__init__.py:一个空文件,告诉Python该目录是一个Python包。test1/asgi.p......
  • 米尔STM32MP135核心板新品发布!又一款入门级嵌入式开发平台
    自2007年意法半导体(ST)推出STM32首款Cortex-M内核MCU,十几年来,ST在MCU领域的发展是飞速向前的。而2019年ST发布了全新的STM32MPU系列产品线,STM32MP1作为新一代MPU的典范,有着极富开创意义的异构系统架构兼容并蓄了MPU和MCU双重优势,受到业界的喜爱!米尔电子作为ST官方合作伙伴,......
  • 2.4 Go语言从入门到精通:条件和循环
    在程序中必然少不了条件语句和循环语句,Go语言在条件、循环语句方面与其他语言存在一定的差异,本文将针对Go语言中条件语句、循环语句的使用,这将会奠定后续复杂程序的基础。1、条件语句条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,......