全栈开发之路——前端篇(3)setup和响应式数据

全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
本文为该系列的第三篇,主要讲述Vue核心的setup语法,同时讲解再使用了setup后如何设置响应式数据。
辅助文档:HTML标签大全(实时更新)

目录

  • 一、Setup
    • 1. setup引入数据
    • 2. setup传方法
    • 3. setup与Vue2中data等的依赖
    • 4. setup语法糖
  • 二、响应式数据设置
    • 1. ref法 创建基本类型响应式数据
    • 2. reactive方法

setup与data、method是同级,所以不要忘记段后逗号。

一、Setup

setup是Vue3特有的方便设置数据和方法的api,是目前Vue3工程主要使用的。是组合式Api,更加方便且易于维护。

1. setup引入数据

setup(){
  //数据
  let name = "TTTi9er"
  let age = 20
  let tel = '114514'

  return {a:name,b:age}
},


return什么数据取决于模板里用不用,你也可以使用传数据的快捷方式,在return里你可以直接写return (name,age)这样相当于return (name = name, age = age)

**注意,此时的name等变量不是相应式的,即数据发生改变的时候不会立刻反应在屏幕上。后续会说,在setup语法糖讲完之后会说。(vue2data中,全是相应式)
**

2. setup传方法

      function showTel(){
             alert(tel)
                         }
        return {a:name,b:age,showTel}

在setup块里,用function定义方法,然后把方法名return即可。


注意,setup的返回值也可以是一个函数,但是不常用,知道即可,下面给出一个实例

return function(){  
  return '函数返回测试'
  }

可以忽略所有,直接在页面渲染’函数返回测试‘。

3. setup与Vue2中data等的依赖

setup与Vue2的data等是可以共存的。
setup里的数据是最早解析的,所以Vue2能读取Vue3,比如setup里有let a=10,你可以在data中使用c=this.a,是可以在模板里读取c的。

setup中的数据不能读取Vue2写法中的data中的数据!
比如data里写了d:900,你不能在Vue3的setup中写let e = d

总体来说,Vue3向下兼容Vue2,建议不要混写

4. setup语法糖

<template>
    <div class = "style_test">
     <h1>其他组件</h1>
     <h2>姓名:{{name}}</h2>
     <h2>年龄: {{age}}</h2>
     <button @click="showTel">查看电话</button>
    </div>
</template>

<script>
  export default{
    name : 'Test',//组件名
    }
</script>

<script setup>

      let name = "TTTi9er"
      let age = 100
      let tel = '114514'

      function showTel(){
             alert(tel)
                         }
</script>

<style>
  .style_test{
       background-color: rgb(72, 138, 166);
       box-shadow: 0 0 10px;
       border-radius:10px;
       padding: 20px;
  }
</style>

如以上代码所示,我们如果要每一个返回,就会很麻烦,所以Vue3提供了一个setup语法糖,我们用标签<script setup></script>来声明语法糖,他会自动返回其中出现的所有内容。以上代码效果如下。

二、响应式数据设置

1. ref法 创建基本类型响应式数据

    import {ref} from 'vue'
      let name = ref('TTTi9er')

我们先引入ref函数,然后在需要相应的数据前加入ref()即可。当你用其他方法修改数据后,会直接渲染在网页上。
注意,这么操作之后,nmae会变成类(RefImpl对象),其value值为你设置的值。实际上,就是vue给你写了个方法,让数据可以实时更新。在框架中,加上ref的数据与原来的用法不变,千万不要改成name.value。

但是,后续的方法中,你需要写.value。例子如下

<script setup>
    import {ref} from 'vue'

      let name = 'TTTi9er'
      let age = ref(100)
      let tel = '114514'

      function showTel(){
             alert(tel)
                         }
      function changeage_test(){
       age.value += 1
      }
</script>
<template>
    <div class = "style_test">
     <h1>其他组件</h1>
     <h2>姓名:{{name}}</h2>
     <h2>年龄: {{age}}</h2>
     <button @click="showTel">查看电话</button>
     <button @click="changeage_test">增加年龄</button>
    </div>
</template>

这样你就已经把age设置为响应式变量了,点击增加后可以即时渲染到屏幕上。

注意,ref用于封装基本变量,字符串、整数等等,一般不包装对象

2. reactive方法

注意,reactive方法用于包装对象。使用方法与ref类似

  let person = reactive({name : 'TTTiger',age : 19})
    function changeage_test(){
       person.age += 1
      }
<template>
    <div class = "style_test">
     <h1>其他组件</h1>
     <h2>姓名:{{person.name}}</h2>
     <h2>年龄: {{person.age}}</h2>
     <button @click="showTel">查看电话</button>
     <button @click="changeage_test">增加年龄</button>
    </div>
</template>

完全一样,只是把之前的.value换成 对象名.属性名 就行了,只要是对象即可,哪怕是类似别表对象等也行,样例如下 。

      let games = reactive([
        {id: '1', name: '我超,原'},
        {id: '2', name: '我超,铲'},
        {id: '3', name: '我超,农'}
      ])
      function change_game(){
         games[0].name = "原神,启动!"
        
      }
<template>
    <div class = "style_test">
     <h1>其他组件</h1>
     <h2>姓名:{{person.name}}</h2>
     <h2>年龄: {{person.age}}</h2>
     <button @click="showTel">查看电话</button>
     <button @click="changeage_test">增加年龄</button>
     <ul>
       <li v-for="g in games" :key = "g.id">{{g.name}}</li>        
     </ul>
     <button @click="change_game">修改第一个游戏</button>
    </div>
</template>

以上代码展示了用reactive响应式包裹一个对象列表,操作是完全一样的。如果各位看不懂上面的结构,我会实时更新一个HTML标签大全,方便你理解结构。但是实际上,上面的结构你多写自然就会了,如果你没接触过,可以直接望文生义,比如这个v-for显然就是循环取出games中的元素。

注意,reactive定义的对象,不能再方法里给他分配新的对象,而要使用Object.assign(car,new_car)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flowable 奇遇

Flowable框架 碰到的问题1. 查询流程执行情况展示2. 查询流程审批人 碰到的问题 1. 查询流程执行情况展示 List<HistoricActivityInstance> list historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId()).orderByHistoricActivit…

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛&#xff0c;包含计算机方向、企业信息化管理、数据处理和数据分析等&#xff0c;随着大数据、云计算、人工智能、物联网等技术的兴起&#xff0c;对能够处理复杂信息系统的专业人才需求激增&#xff0c;信息管理与信息系统就业…

【Web】CTFSHOW 新手杯 题解

目录 easy_eval 剪刀石头布 baby_pickle repairman easy_eval 用script标签来绕过 剪刀石头布 需要赢100轮&#x1f914; 右键查看源码拿到提示 一眼session反序列化 打PHP_SESSION_UPLOAD_PROGRESS 脚本 import requestsp1 a|O:4:"Game":1:{s:3:"log…

STM32——点亮第一个LED灯

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

AWS 机器学习课程--1.机器学习的介绍

课程链接&#xff1a;机器学习&#xff08;ML&#xff09;和人工智能&#xff08;AI&#xff09;— AWS 数字和课堂培训 免费课程&#xff0c;注册结束之后&#xff0c;就可以选择课程了。 共计6个课程&#xff0c;推荐学习时长为8小时13分钟 本章建议学习时间为30min&#…

C++奇迹之旅:C++内存管理的机制(进阶篇)

文章目录 &#x1f4dd;new和delete操作自定义类型&#x1f320; operator new与operator delete函数&#x1f309;operator new与operator delete函数 &#x1f320;new和delete的实现原理&#x1f309;内置类型&#x1f309;自定义类型 &#x1f320;定位new表达式(placement…

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…

202012青少年软件编程(Python)等级考试试卷(一级)

第 1 题 【单选题】 运行下方代码段&#xff0c;输出是6&#xff0c;则输入的可能是&#xff08; &#xff09;。 a eval(input())print(a)A :8%2 B :8/2 C :3*2 D :3**2 正确答案:C 试题解析: 第 2 题 【单选题】 关于Python变量&#xff0c;下列叙述正确的是&#x…

中仕公考:北京额度管理(社会化/员额制)教师和在编教师的区别

一、什么是额度管理(社会化/员额制)教师? 社会化、员额制教师、额度管理教师&#xff0c;是为了解决中小学教师总量或编制不足&#xff0c;在现有编制基础上另外核定一定数额由地方政府保障&#xff0c;不纳入编制管理&#xff0c;另外实行专项管理。不办理入编手续&#xff…

自定义表单元素组件内容变化触发ElForm重新校验

对于下图中“付费类型”怎么实现有很多种方式&#xff0c;我能想到的是以下两种&#xff1a; Element Plus的RadioButton自定义组件 1. RadioButton 它本质上就是一个单选组件&#xff0c;它跟Element Plus的RadioButton本质上没有区别&#xff0c;无非是外观上的差别。那么…

Windows计算机安装并连接Linux系统(VMware、XShell)

一、Windows计算机可以通过VMware虚拟机&#xff0c;安装Linux系统 说明&#xff1a;VMware Workstation虚拟化软件&#xff0c;在Windows或Linux计算机运行的应用程序&#xff0c;可模拟基于X86的标准PC环境&#xff0c;构建的虚拟机和真实的物理主机没太大区别&#xff08;区…

自学Vue3 Day2

一、组合式Api组件通信 1.父与子之间 父传子&#xff1a;父导入子组件&#xff0c;定义好数据&#xff0c;子组件用props接收&#xff0c;这里defineProps底层本质还是props. 注意模板渲染过程不需要写props 子传 父&#xff1a; 2.模版引用&#xff08;ref&#xff09;和组…

MySQL:设置唯一索引还是出现重复数据

一、MySQL中null和null不相等 MySQL中&#xff1a;两个值比较会出现&#xff1a;true、false、null 三种情况&#xff1b; null和null相比较会出现未知的类型 二、然后看完这个视频 美团二面&#xff1a;我记得明明加了mysql唯一索引&#xff0c;为啥还会出现重复数据吗&…

PHP的数组练习实验

实 验 目 的 掌握索引和关联数组&#xff0c;以及下标和元素概念&#xff1b; 掌握数组创建、初始化&#xff0c;以及元素添加、删除、修改操作&#xff1b; 掌握foreach作用、语法、执行过程和使用&#xff1b; 能应用数组输出表格和数据。 任务1&#xff1a;使用一维索引数…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么&#xff1f;直观解释Transformer | 深度学习第5章 0:00 - 预测&#xff0c;采样&#xff0c;重复&#xff1a;预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层&#xff1a;…

(一)JSP教程——JSP脚本标签

JSP脚本标签 JSP脚本标签通常用作对象操作和数据运算&#xff0c;从而动态地生成页面内容。这里有三种类型的脚本标签&#xff1a;声明、代码段和表达式。 JSP声明 JSP声明一个或多个变量、方法&#xff0c;供以后的代码使用。必须先对变量和方法进行声明&#xff0c;才能使用…

golang学习笔记(内存逃逸分析)

golang的内存逃逸 逃逸分析&#xff08; Escape analysis&#xff09; 是指由编译器决定内存分配的位置&#xff0c; 不需要程序员指定。 函数中申请一个新的对象。 如果分配在栈中&#xff0c; 则函数执行结束可自动将内存回收&#xff1b;如果分配在堆中&#xff0c; 则函数…

微软开源 MS-DOS「GitHub 热点速览」

上周又是被「大模型」霸榜的一周&#xff0c;各种 AI、LLM、ChatGPT、Sora、RAG 的开源项目在 GitHub 上“争相斗艳”。这不 Meta 刚开源 Llama 3 没几天&#xff0c;苹果紧跟着就开源了手机端大模型&#xff1a;CoreNet。 GitHub 地址&#xff1a;github.com/apple/corenet 开…

网络安全前置知识-linux操作系统

计算机体系结构 计算机发展历史 计算机组成 计算机硬件组成 1. CPU 原文链接&#xff1a;https://blog.csdn.net/stone_fall/article/details/88414017 一条指令的执行过程分为以下5个周期&#xff1a; 取指令周期&#xff08;Instruction Fetch&#xff0c;IF&#xff…

【Cpp】类和对象

标题&#xff1a;【Cpp】类和对象 水墨不写bug 正文开始&#xff1a; &#xff08;一&#xff09;面向过程与面向对象 面向过程和面向对象是两种不同的编程思想。 面向过程指的是将程序分解成多个步骤&#xff0c;每个步骤都是一个独立的函数&#xff0c;通过函数之间的调用实…