成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3:使用 Composition API 不需要 Pinia?

開發 前端
在日常開發中,經常會出現功能變得過于復雜而無法限制在單個 Vue.js 組件中的情況。分解組件是合乎邏輯的解決方案,但這帶來了在組件之間共享數據和業務邏輯的挑戰。雖然 Pinia 在這方面很受歡迎,但如果廣泛用于所有復雜的業務邏輯,它就會變得不堪重負。

在 Vue.js 開發的動態環境中,在單個組件中處理復雜的業務邏輯可能會導致笨重的文件和維護噩夢。雖然 Pinia 提供集中式狀態管理,但僅依賴它來處理復雜的業務邏輯可能會導致代碼混亂。本文探討了使用 Composition API 的替代方法,說明開發人員如何將數據和邏輯封裝在自定義 hooks 中以實現高效的狀態管理。

駕馭復雜的業務邏輯

在日常開發中,經常會出現功能變得過于復雜而無法限制在單個 Vue.js 組件中的情況。分解組件是合乎邏輯的解決方案,但這帶來了在組件之間共享數據和業務邏輯的挑戰。雖然 Pinia 在這方面很受歡迎,但如果廣泛用于所有復雜的業務邏輯,它就會變得不堪重負。

擁抱 Composition API 和自定義 Hook

一個引人注目的替代方案是利用 Composition API 將數據和業務邏輯封裝在自定義 hooks 中。這些鉤子(以 useStore 函數為例)成為狀態定義、更新和特定業務邏輯的中心。反過來,組件只需要與這些鉤子公開的狀態和方法進行交互,從而抽象出內部的復雜性。

// 使用 Composition API 自定義 hook
import { computed, ref } from "vue";

// 在 useStore 函數外部定義 count 變量
const count = ref(0);
const doubleCount = computed(() => {
  return count.value * 2;
});

export const useStore = () => {
  function increment() {
    count.value = count.value + 1;
  }

  function decrement() {
    count.value = count.value - 1;
  }

  return {
    count,
    doubleCount,
    increment,
    decrement,
  };
};

孤立的 Hook 調用的陷阱

當 CountValue 和 CountBtn 等組件在其 setup 函數中獨立調用 useStore 掛鉤時,就會出現挑戰。本文揭示了每次調用時創建 count 變量的獨立實例的陷阱,從而導致組件之間的狀態更新不一致。

// CountValue.vue component
<template>
  <p>count's value is {{ count }}</p>
  <p>doubleCount's value is {{ doubleCount }}</p>
</template>

<script setup lang="ts">
import { useStore } from "./store";

// 對 useStore 的獨立調用創建獨立的 count 實例
const { count, doubleCount } = useStore();
</script>

// CountBtn.vue component
<template>
  <button @click="decrement">count--</button>
  <button @click="increment">count++</button>
</template>

<script setup lang="ts">
import { useStore } from "./store";

// 對 useStore 的獨立調用創建獨立的 count 實例
const { decrement, increment } = useStore();
</script>

協調組件之間的狀態

為了克服這一挑戰,一種優化方法是將 count 變量的定義重新定位到 useStore 函數之外。這可確保調用 useStore hook 的所有組件共享 count 變量的同一實例,從而促進同步狀態管理。

// 將計數定義移至 useStore 函數之外
import { computed, ref } from "vue";

const count = ref(0);
const doubleCount = computed(() => {
  return count.value * 2;
});

export const useStore = () => {
  function increment() {
    count.value = count.value + 1;
  }

  function decrement() {
    count.value = count.value - 1;
  }

  return {
    count,
    doubleCount,
    increment,
    decrement,
  };
};

在 Pinia 似乎難以應對復雜業務邏輯的各個方面的情況下,Composition API 提供了一個干凈、有組織的替代方案。通過將數據和邏輯封裝在自定義鉤子中,開發人員可以在 Vue.js 應用程序中的模塊化和高效狀態管理之間取得平衡。

本文強調了 Composition API 在構建 Vue.js 解決方案中的多功能性,以最大限度地提高靈活性和可維護性。通過采用自定義鉤子,開發人員可以編寫符合 Vue.js 原則的有組織、可讀的代碼。

https://blog.stackademic.com/vue-3-you-dont-need-pinia-in-some-scenarios-with-the-composition-api-79fc4ff6ab8f

責任編輯:武曉燕 來源: 獨立開發者張張
相關推薦

2020-09-19 21:15:26

Composition

2020-09-18 14:01:21

vue3.0

2021-08-11 08:31:42

前端技術Vue3

2025-06-06 08:49:10

Vue3項目Pinia

2024-04-02 08:50:08

Go語言react

2017-03-13 13:54:40

戴爾

2021-12-16 08:47:56

Vue3 插件Vue應用

2024-04-08 07:28:27

PiniaVue3狀態管理庫

2012-08-23 09:50:07

測試測試人員軟件測試

2009-11-23 12:45:22

2022-02-22 07:37:26

VuePinia態管理庫

2021-05-20 07:26:21

工具Vuex Vue.js

2020-07-28 08:28:07

JavaScriptswitch開發

2022-06-07 17:01:31

UI框架前端

2024-04-10 08:27:32

PiniaVue3持久化插件

2015-09-30 09:57:53

天分熱情工程師

2015-08-20 10:56:19

算法界面開發

2013-12-02 09:43:29

字符串編程

2024-02-22 09:00:00

LogitMat數據集算法

2022-09-14 15:10:40

前端架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人亚洲网站 | 免费在线观看91 | 精品国产乱码久久久久久影片 | av官网在线 | 99精品欧美一区二区三区综合在线 | 精品96久久久久久中文字幕无 | 久久国产亚洲 | 久久毛片| 亚洲 欧美 日韩在线 | a级免费视频 | 97伦理电影 | 国产精品18久久久 | 国产日韩欧美一区二区在线播放 | 国产一区www| 欧美日韩黄 | 国产真实精品久久二三区 | 天天天天天操 | 亚洲国产高清高潮精品美女 | 一区在线播放 | 亚洲性在线 | 日韩欧美在线视频播放 | 久久久久久精 | 91xx在线观看 | 精品久久久久久久久久久下田 | 日韩免费成人av | 亚洲精品电影网在线观看 | 91亚洲国产成人久久精品网站 | 精品在线播放 | 久久久久国产精品www | 国产一级电影在线观看 | 国产极品车模吞精高潮呻吟 | 一区二区三区久久 | 美女久久久久久久久 | 欧美一级二级视频 | 免费看国产片在线观看 | 天天操天天射天天舔 | 亚洲欧美视频 | 99国产精品99久久久久久粉嫩 | 欧美理伦片在线播放 | 国产ts人妖另类 | 欧美一区二区三区精品免费 |