国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue 3.0 前瞻Vue Function API新特性體驗(yàn)

2024-05-06 15:36:01
字體:
供稿:網(wǎng)友

最近 Vue 官方公布了 Vue 3.0 最重要的RFC:Function-based component API,并發(fā)布了兼容 Vue 2.0 版本的 plugin:vue-function-api,可用于提前體驗(yàn) Vue 3.0 版本的 Function-based component API。筆者出于學(xué)習(xí)的目的,提前在項(xiàng)目中嘗試了vue-function-api。

筆者計(jì)劃寫兩篇文章,本文為筆者計(jì)劃的第一篇,主要為筆者在體驗(yàn) Vue Function API 的學(xué)習(xí)心得。第二篇計(jì)劃寫閱讀vue-function-api的核心部分代碼原理,包括setup、observable、lifecycle。

本文閱讀時(shí)間約為15~20分鐘。

概述

Vue 2.x 及以前的高階組件的組織形式或多或少都會(huì)面臨一些問題,特別是在需要處理重復(fù)邏輯的項(xiàng)目中,一旦開發(fā)者組織項(xiàng)目結(jié)構(gòu)組織得不好,組件代碼極有可能被人詬病為“膠水代碼”。而在 Vue 2.x 及之前的版本,解決此類問題的辦法大致是下面的方案:

mixin 函數(shù)式組件 slots

筆者維護(hù)的項(xiàng)目也需要處理大量復(fù)用邏輯,在這之前,筆者一直嘗試使用mixin的方式來實(shí)現(xiàn)組件的復(fù)用。有些問題也一直會(huì)對(duì)開發(fā)者和維護(hù)者造成困惑,如一個(gè)組件同時(shí)mixin多個(gè)組件,很難分清對(duì)應(yīng)的屬性或方法寫在哪個(gè)mixin里。其次,mixin的命名空間沖突也可能造成問題。難以保證不同的mixin不用到同一個(gè)屬性名。為此,官方團(tuán)隊(duì)提出函數(shù)式寫法的意見征求稿,也就是RFC:Function-based component API。使用函數(shù)式的寫法,可以做到更靈活地復(fù)用組件,開發(fā)者在組織高階組件時(shí),不必在組件組織上考慮復(fù)用,可以更好地把精力集中在功能本身的開發(fā)上。

注:本文只是筆者使用vue-function-api提前體驗(yàn) Vue Function API ,而這個(gè) API 只是 Vue 3.0 的 RFC,而并非與最終 Vue 3.x API 一致。發(fā)布后可能有不一致的地方。

在 Vue 2.x 中使用

要想提前在Vue 2.x中體驗(yàn) Vue Function API ,需要引入vue-function-api,基本引入方式如下:

import Vue from 'vue';import { plugin as VueFunctionApiPlugin } from 'vue-function-api';Vue.use(VueFunctionApiPlugin);

基本組件示例

先來看一個(gè)基本的例子:

<template>  <div>    <span>count is {{ count }}</span>    <span>plusOne is {{ plusOne }}</span>    <button @click="increment">count++</button>  </div></template><script>import Vue from 'vue';import { value, computed, watch, onMounted } from 'vue-function-api';export default {  setup(props, context) {    // reactive state    const count = value(0);    // computed state    const plusOne = computed(() => count.value + 1);    // method    const increment = () => {      count.value++;    };    // watch    watch(      () => count.value * 2,      val => {        console.log(`count * 2 is ${val}`);      }    );    // lifecycle    onMounted(() => {      console.log(`mounted`);    });    // expose bindings on render context    return {      count,      plusOne,      increment,    };  },};</script>            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 海丰县| 西丰县| 阿克陶县| 玛多县| 东城区| 延长县| 龙胜| 黑山县| 赤壁市| 图片| 萨迦县| 筠连县| 武穴市| 上栗县| 凌海市| 潼南县| 新绛县| 砚山县| 临泉县| 安乡县| 台南市| 滨州市| 开平市| 乌拉特后旗| 临桂县| 阜城县| 呼伦贝尔市| 丰台区| 吉木乃县| 游戏| 昔阳县| 巴塘县| 广安市| 永修县| 泽库县| 泰和县| 察雅县| 平遥县| 克拉玛依市| 安陆市| 尉氏县|