首页 > 其他分享 >前端之vue3的setup和setup的2个的形参、响应式页面

前端之vue3的setup和setup的2个的形参、响应式页面

时间:2023-05-30 16:13:45浏览次数:55  
标签:obj name 形参 对象 setup person vue3 ref

setup

setup是个函数, 包含数据、方法等,是组合api的“舞台”。
setup返回值:
1.对象,其中的属性、方法都可以在模板中直接使用
2.渲染含数(了解就好)

export default {
  name: "App",
  components: {},
  setup() {
  // 非响应式变量
    let name = "欧西里斯";
    let age = 18;
    function sayHello() {
      alert(`Hello,I'm ${name}`);
    }

    return {
      name,
      age,
      sayHello,
    };
  },
};

image
setup和data(), methods,vue3兼容vue2.

setup总结

image
image
async 修饰的函数返回值被Promise包裹住
async 与 await 配合

ref()函数 – 实现响应式

返回引用对象(ref对象), 可以动态渲染页面
    let age = ref(18);
    let obj = ref({
      type: "前端工程师",
      salary: "10k",
    });

使用:
1.js中使用时用 对象.value 读取或修改数据

      age.value = 14;
      obj.value.type = "后端工程师", obj.value.salary = "10000k";

2.在模板中, 用插值语法, RefImpl对象可以自动读取value属性的值

// ref的参数是对象,type是参数对象的属性
  <h2>职业:{{ obj.type }}</h2>

// ref的参数不是对象
  <h2>年龄:{{ age }}</h2>

ref依旧可以作为唯一标识获取元素对象

返回值是一个对象
image
RefImpl
ref: reference
impl: implement

ref()小结

image

reactive函数处理对象(包括数组)

深层次响应,也就是说多次对象嵌套属性也会满足响应式
数组可以用索引改(响应式)

<template>
<!-- 4.渲染 -->
  <h1>个人信息</h1>
  <h2>姓名:{{ person.name }}</h2>
  <h2>年龄:{{ person.age }}</h2>
  <h2>职业:{{ person.obj.type }}</h2>
  <h2>工资:{{ person.obj.salary }}</h2>
  <h2>爱好:{{ person.hobby }}</h2>
  <button @click="sayHello">问好</button>
  <button @click="changeInfo">修改信息</button>
</template>

<script>
// 1.引入
import { reactive } from "vue";
export default {
  name: "App",
  components: {},
  setup() {
    // 数据
    // 2.使用
    let person = reactive({
      name: "欧西里斯",
      age: 18,
      obj: {
        type: "前端工程师",
        salary: "10k",
      },
      hobby: ["抽烟", "喝酒", "烫头"],
    });
    // 方法
    // 3.修改
    function sayHello() {
      alert(`Hello,I'm ${person.name}`);
    }
    function changeInfo() {
      person.name = "李四";
      person.age = 14;
      // console.log(obj);
      (person.obj.type = "后端工程师"), (person.obj.salary = "10000k");
      // console.log(name, age);
      person.hobby[0] = "学习";
    }
    return {
      person,
      sayHello,
      changeInfo,
    };
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

reactive小结

image

vue2/3响应式原理

vue2存在问题, 提供的修改方式

image
image

vue3解决了以上问题

image
原因: reactive处理对象,变成响应式对象, 使用了ES6新属性proxy

window.proxy 浏览器内置构造函数

window.proxy修改源数据
image

vue3响应原理

es6新属性 Reflect 增(defineProperty)删(deleteProperty)改(set)查(get)
Reflect返回值
成功true
失败false
image

vue3响应原理总结

image

reactive与ref区别/使用

image
数据可以用data对象
data对象内有n个对象

setup的两个注意点 – 参数

image

setup只有两个参数

第一个props

用props接收,以参数形式放入setup内
setup内的props是Proxy代理对象形式

import { reactive } from "vue";
export default {
  name: "HelloWorld",
  // 1.接收
  props: ["msg"],
  // 2.参数1(Proxy对象形式)
  setup(props) {
  // 3.使用
    console.log("props:", props.msg);
    let person = reactive({
      name: "欧西里斯",
      hobby: ["抽烟", "喝酒", "烫头"],
    });

    return {
      person,
    };
  },
};

第二个context

(用props同级对象)emits接收父组件传递的事件
和props一样的用法, 但是不写也可以用
用emits接收父组件传递过来的自定义事件

emit触发事件

context.emit(‘事件’,参数)

$attrs

父组件传参, 子组件没接收, 数据存在子组件的$attrs属性内

$slots

父组件将html内容传递给子组件, 子组件没用slot(插槽)接收, 数据存在子组件的 $slots属性内

文章转载自:https://blog.csdn.net/weixin_46372074/article/details/124932467

标签:obj,name,形参,对象,setup,person,vue3,ref
From: https://www.cnblogs.com/jeecg158/p/17443455.html

相关文章

  • 黑马Vue3 + ElementPlus + Pinia 小兔鲜电商项目2023版
    黑马Vue3+ElementPlus+Pinia小兔鲜电商项目2023版download:3w51xuebccomElementPlus:优雅高效的Vue组件库随着Vue.js在前端开发中的广泛应用,越来越多的UI组件库涌现出来。而其中一款备受瞩目的组件库就是ElementPlus。作为一款基于Vue3.0的组件库,ElementPlus不仅完美地继承了......
  • vue3.0路由的两种方式
    import{createRouter,createWebHashHistory}from'vue-router'constroutes=[{path:'/',name:'index',component:()=>import('./pages/index.vue')//异步加载}]constrouter=createRouter(......
  • <script> 和 <script setup> 的一些主要差别
    <scriptsetup>是Vue3中的新特性,它是一种简化和更具声明性的语法,用于编写组件的逻辑部分。相比之下,<script>是Vue2中常用的编写组件逻辑的方式。下面是<script>和<scriptsetup>的一些主要差别:语法简洁性:<scriptsetup>的语法更为简洁。它使用了更少的......
  • Vue3 ,html 修改滚动条样式
    /*滚动条*/body*::-webkit-scrollbar{width:5px;height:10px;}body*::-webkit-scrollbar-track{background:#fff;border-radius:2px;}body*::-webkit-scrollbar-thumb{background:rgb(205,206,206);border-radius:10px;}body*::-webk......
  • Vue3+TS后台项目笔记
    Date:2023-05-2917:56:27Author:GavinPS:不喜欢做复制粘贴,这篇笔记只是简写关键P1~12Vue3中的通信方式props父=>子传的为不可变数据自定义事件子=>父全局事件总线任意组件mitt实现v-model父<=>子写在组件标签上,实现props和自定义事件ref子=>父子组件需e......
  • vue3学习中使用vue-router@4的问题Invalid VNode type: undefined (undefined)
    首先是按照常规的箭头函数引入的方法,结果报一下错误,且页面报错constHelloWorld=()=>import('../components/HelloWorld.vue'); 解决办法import{defineAsyncComponent}from'vue'constHelloWorld=defineAsyncComponent(()=>import('../components/HelloWorld.vue......
  • vue3.0 study
    1、newVue->create(vue)2.03.02、setup函数是CompositionAPI(组合API)的入口<script>exportdefault{name:'App',setup(){letname='流星'letage=18//方法functionsay(){console.log(`我叫${name},今年${age}岁`......
  • vue3中 TypeError: track(...) is not a function
    我这边遇到的是在使用到element-plus的一个<el-input>标签时就开始出现(TypeError:track(...)isnotafunction),我怀疑这是element-plus与vue的版本问题,查看element-plusgithub的Releases 发现支持的版本比我当前使用的版本3.3.3低很多,应该element-plus不支持了,那怎么办,只能......
  • VUE3
    https://github.com/moocstudent/vue-war昨天通过vue官网建立了vue项目,逐渐看了下组合式/选项式API的区别虽然在前几个月里,通过做SH的伙计给的单子接触了VUEANTD,但是实际上对其原理未知(难道只能说跟前天面试的一样,问Jquery是跟JS都是对DOM的操作吗)显然VUE有很多有趣的地方......
  • 基于Electron24+Vite4+Vue3搭建桌面端应用
    一说到创建桌面应用,就不得不提及Electron和Tauri框架。这次给大家主要分享的是基于electron最新版本整合vite4.x构建vue3桌面端应用程序。之前也有使用vite2+vue3+electronc创建桌面端项目,不过 vue-cli-plugin-electron-builder 脚手架插件构建的项目electron版本只有13.x。如......