vue3学习笔记 Composition API setup

一、Composition API优势

相对于vue2的option API Vue3的Composition API设计更有优势

Composition(组合式)Api 功能分组

Composition(组合式)Api 功能导入复用

组合式Api 所解决的问题

(1) 更好的代码组织结构

(2) 相同的代码逻辑可以进行复用

home.vue 3种方式递进升级

<template><div class="home"><div><p>{{ name }}</p><button @click="getName">姓名</button></div><div><p>{{ age }}</p><button @click="getAge">年龄</button></div></div><HomeB></HomeB>
</template><script>
// @ is an alias to /src
import HelloWorld from "@/components/HelloWorld.vue";
import HomeB from "./HomeB.vue";
// import { ref } from "vue";
import { useName, useAge } from "./user";export default {name: "Home",setup() {// 1.Composition(组合式)Api// const people = {//   name: "yusir",//   age: 18,// };// const name = ref("");// const getName = () => {//   name.value = people.name;// };// const age = ref("");// const getAge = () => {//   age.value = people.age;// };// return {//   name,//   getName,//   age,//   getAge,// };/* ------------------------ */// 2.Composition(组合式)Api 功能分组// const people = {//   name: "yusir",//   age: 18,// };// return {//   ...useName(people), //展开运算符//   ...useAge(people),// };// function useName(people) {//   const name = ref("");//   const getName = () => {//     name.value = people.name;//   };//   return {//     name,//     getName,//   };// }// function useAge(people) {//   const age = ref("");//   const getAge = () => {//     age.value = people.age;//   };//   return {//     age,//     getAge,//   };// }/* ------------------------ */// 3.Composition(组合式)Api 功能导入复用// 组合式Api 所解决的问题// (1) 更好的代码组织结构// (2) 相同的代码逻辑可以进行复用const people = {name: "yusir",age: 18,};return {...useName(people), //展开运算符...useAge(people),};},components: {HelloWorld,HomeB,},
};</script>

HomeB.vue

<template><div class="home"><div><p>{{ name }}</p><button @click="getName">姓名</button></div><div><p>{{ age }}</p><button @click="getAge">年龄</button></div></div>
</template>
<script>
import { useName, useAge } from "./user";export default {name: "HomeB",setup() {const people = {name: "yusirxiaer",age: 19,};return {...useName(people), //展开运算符...useAge(people),};},
};
</script>
<style lang='less' scoped></style>

user.js

import {ref
} from 'vue'
export function useName(people) {const name = ref("");const getName = () => {name.value = people.name;};return {name,getName,};
}
export function useAge(people) {const age = ref("");const getAge = () => {age.value = people.age;};return {age,getAge,};
}

二、setup 入口函数

1.组件创建之前被调用 

setup 先于created执行,this指向windows

created()里打印的this 是proxy对象 指向组件实例

setup函数参数 

Props Context (看HomeB子组件)

Context JavaScript对象

  • context.attrs: Attribute属性(非响应式对象)非props数据
  • context.slots: 插槽(非响应式对象)
  • context.emit: 触发事件的方法 === this.$emit

2.this不会只指向当前组件实例

3.返回值

返回一个对象,对象的属性可以直接在模板中进行使用(就像Vue2使用data和methods一样)

看代码例子

Home.vue 

<template><HomeB :title="title" desc="父组件传递过来的普通属性" @update="update"><h1>普通的匿名插槽</h1><h2>{{ title }}</h2></HomeB>
</template><script>
// @ is an alias to /src
import HomeB from "./HomeB.vue";export default {name: "Home",setup() {},data() {return {title: "父组件的title",};},created() {console.log("created()打印this");console.log(this);},methods: {update(newTitle) {this.title = newTitle;},},components: {HomeB,},
};</script>

HomeB.vue

<template><div class="homeB"></div>
</template>
<script>
export default {name: "HomeB",props: {title: {type: String,required: true,},},setup(props, { attrs, slots, emit }) {console.log("props:", props);console.log("Attribute (非响应式的对象):", attrs);console.log("插槽:", slots.default());emit("update", "子组件更新数据的事件");},
};
</script>
<style lang='less' scoped></style>

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TCP传输数据-键盘录入】

package com.yjf.esupplier.common.test;import java.io.*; import java.net.Socket;/*** author shusheng* description TCP 传输数据:键盘录入* Email shushengyiji.com* date 2019/1/15 22:57*/ public class ClientDemo1 {public static void main(String[] args) throws I…

04

1、创建/guanli 目录&#xff0c;在/guanli下创建zonghe 和 jishu 两个目录&#xff08;一条命令&#xff09; [rootlocalhost ~]# mkdir /guanli [rootlocalhost ~]# touch /guanli/zonghe [rootlocalhost ~]# touch /guanli/jishu [rootlocalhost ~]# ls /guanlix 2、添加组帐…

事件冒泡 bubbles cancelBubble stopPropagation() stopImmediatePropagation() 区别

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>事件冒泡</title></head><body><h4>bubbles cancelBubble stopPropagation() stopImmediatePropagation() 区别</h4><input type"te…

vue2.0关于添加属性后视图不能更新的问题

属性赋值和this.$set 和vue.$set方法我不行 可以用 this.$delete来进行删除后在设置都可以了 转载于:https://www.cnblogs.com/zhouyideboke/p/11276299.html

vite2.1 最新alias别名设置方式

vite.config.js 别名配置 resolve.alias 类型&#xff1a; Record<string, string> | Array<{ find: string | RegExp, replacement: string }> 将会被传递到 rollup/plugin-alias 作为 entries 的选项。也可以是一个对象&#xff0c;或一个 { find, replacement …

Java生鲜电商平台-商城后台架构与原型图实战

Java生鲜电商平台-商城后台架构与原型图实战 说明&#xff1a;生鲜电商平台的运营平台&#xff0c;其中需要很多的功能进行管理。目前把架构与原型图实战分享给大家&#xff0c;希望对大家有用. 仪表盘/首页&#xff0c;简单统计&#xff0c;报表页&#xff0c;运营快捷口。实际…

antdesignvue upload vue3个人笔记待更新

remove点击移除文件时的回调&#xff0c;返回值为 false 时不移除。支持返回一个 Promise 对象&#xff0c;Promise 对象 resolve(false) 或 reject 时不移除。Function(file): boolean | Promise无 beforeUpload上传文件之前的钩子&#xff0c;参数为上传的文件&#xff0c;若…

logging模块和包

日志模块和包 logging logging模块简介 logging模块是记录我们软件的各种状态&#xff0c;还可以记录各种交易信息 其实每个软件都是有错误日志的,开发人员可以通过错误日志中的内容对他的程序进行修改 日志级别 import logginglogging.debug(调试debug) # DEBUG 10…

python软件开发规范

软件开发规范 什么是软件开发规范&#xff1f; 好的设计项目目录结构&#xff0c;就和编码风格一样&#xff0c;是每个程序员都有的风格&#xff0c;但是在流水化标准化作业过程中&#xff0c;个性和风格是 不被鼓励的。如果你去维护一个非常不好读的项目&#xff0c;虽然实现逻…

D3Vueecharts个人乱记

利用d3vue开发的一个网络拓扑图 https://copyfuture.com/blogs-details/20200710101052238h32wazjmcii49dr 一开始用的是echart画的。 根据https://gallery.echartsjs.com/editor.html?cxH1Rkt3hkb&#xff0c;成功画出简单的节点关系。 如图&#xff1a; 总结—— 【优…

vue中使用Vue-pdf在线预览

下载 npm i vue-pdf 引入(在所需要预览的页面) <script>import axios from axiosimport pdf from vue-pdfimport CMapReaderFactory from vue-pdf/src/CMapReaderFactory.js // 加载中文的包export default {components: {pdf},data () {return {numPages:&#xff0c;…

oracle 自定义 聚合函数

Oracle自定义聚合函数实现字符串连接的聚合 create or replace type string_sum_obj as object ( --聚合函数的实质就是一个对象 sum_string varchar2(4000), static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number, --对象初始化 member func…

Vue3里的setup中使用vuex

useStore 这里我们可以直接从vuex 4.X中解构出useStore方法&#xff0c;就可以在setup中使用vuex的相关函数 template 使用$store <template><div><h2>{{ $store.state.count }}</h2><button click"increaseCount">点击</button…

JQ 取CHECKBOX选中项值

备忘录 $("[namecheckbox]:checked").each(function(){ alert((this).val()); }) ;转载于:https://www.cnblogs.com/showblog/archive/2010/09/13/1825099.html

vue3 echarts5 graph关系图谱 点击图例节点消失线不消失重复生成问题

const myChart ref(null);const myCharts ref(null);onMounted(() > {// 这种会导致线仍然存在 重复生成myCharts.value echarts.init(myChart.value);myCharts.value.setOption(option);});return {myChart,myCharts,}; 现象&#xff1a;如下图1 点击图例类目2&#xf…

非常完整的coco screator socketio

https://github.com/SeaPlanet/cocoscreator_chat 前端源码 https://github.com/socketio/socket.io-client https://cdnjs.com/libraries/socket.io 转载于:https://www.cnblogs.com/suneil/p/11288628.html

JavaScript 中 obj.hasOwnProperty(prop) 方法

语法 obj.hasOwnProperty(prop) 参数 prop 要检测的属性的 String 字符串形式表示的名称&#xff0c;或者 Symbol。 返回值 用来判断某个对象是否含有指定的属性的布尔值 Boolean。 描述 所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测…

python面向对象初识

面向对象编程 1.面向对象初步了解 ​ 面向过程编程与函数编程对比&#xff1a; s1 ajdsgkaffddha count 0 for i in s1:count 1 print(f字符串的长度为{count}) # 面向过程编程每计算一次便使用一次for循环def my_len(s): # 计算数据类型长度的函数&#xff0c;可重复使用…

Vue3 VSCode新建项目报错The template root requires exactly one element.

1.首先我们点击左侧第四个图标插件2.输入框搜索vetur插件3.点击设置图标&#xff0c;再点击扩展设置4.搜素vetur>validation>template&#xff0c;取消vetur>validation>template的勾选 然后就不会报错了

计算机视觉概述

关于计算机视觉的介绍性文章&#xff0c;包括计算机视觉的定义&#xff0c;和人类视觉的区别以及涉及到的学科等等。 1. 什么是计算机视觉 计算机视觉既是工程领域&#xff0c;也是科学领域中的一个富有挑战性重要研究领域。计算机视觉是一门综合性的学科&#xff0c;它已经吸引…