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.pswp.cn/news/247308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247308.shtml
英文地址,請注明出處:http://en.pswp.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;它已經吸引…