欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

前端學習12 pinia 和 vuex 狀態(tài)管理

在現(xiàn)代前端開發(fā)中,狀態(tài)管理是一個至關重要的方面。尤其是在大型應用中,如何高效、清晰地管理狀態(tài)不僅影響著代碼的可讀性和可維護性,還對應用的性能有直接的影響。在 Vue3 中,Vuex 和 Pinia 是兩種主要的狀態(tài)管理庫,這兩者各有不同的設計理念和使用方式。

1.vuex

Vuex 是 Vue.js 官方的狀態(tài)管理庫。它采用了 Flux 的思想,提供了一個集中式存儲,允許組件以不同的方式共享狀態(tài)。Vuex 的核心概念包括 State、Getters、Mutations 和 Actions。

其中:

1.State: 應用的狀態(tài)存儲。

2.Getters: 類似于計算屬性,用于計算基于狀態(tài)的派生狀態(tài)。

3.Mutations: 處理狀態(tài)的唯一方式,直接修改狀態(tài)。

4.Actions: 進行異步操作,并提交 Mutations。

5.modules:進行劃分模塊。

vuex示例代碼:

// store.js
import { createStore } from 'vuex';

const store = createStore({
  state: {
    //狀態(tài)的存儲
    count: 0,
  },
  getters: {
    //計算其中的派生元素
    doubleCount(state) {
      return state.count * 2;
    },
  },
  mutations: {
    //定義其中的操作
    increment(state) {
      state.count++;
    },
  },
  actions: {
    //進行異步操作,并提交 Mutations。
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    },
  },
});

export default store;

使用vuex:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Double Count: {{ doubleCount }}</p>
    <button @click="increment">Increment</button>
    <button @click="incrementAsync">Increment Async</button>
  </div>
</template>

<script>
import { mapState, mapGetters, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['count']),
    ...mapGetters(['doubleCount']),
  },
  methods: {
    ...mapActions(['increment', 'incrementAsync']),
  },
};
</script>

2.pinia

Pinia 是一個新興的狀態(tài)管理庫,也是 Vue.js 的官方推薦替代方案。它為 Vue 3 提供了一種更簡單、更具靈活性的狀態(tài)管理方式,與 Vuex 相比,Pinia 在設計上更現(xiàn)代化,支持 Composition API,使得開發(fā)者在使用時更加方便。

其中:

Store: 狀態(tài)存儲的基本單位,通過建立一個或多個 Store 來管理狀態(tài)。這是與vuex最主要的區(qū)別。

State: 用于保存應用的響應式狀態(tài)。

Getters: 計算屬性的延伸,基于狀態(tài)計算派生值。

Actions: 包含了執(zhí)行異步操作的行為和直接修改狀態(tài)的方法。

3.pinia的使用

3.1 piniad的創(chuàng)建

import { createApp,h } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
const app = createApp(App)
app.use(createPinia())

3.2 pinia 定義store

在深入研究核心概念之前,我們需要知道 Pinia 是使用 defineStore() 定義的,并且它需要一個唯一的 name 作為第一個參數(shù)傳遞: name(也稱為id)是必需的,Pinia使用 name 參數(shù)將 Store 連接到 devtools。

將返回的函數(shù)命名為 use… 是一種跨組件的約定,使其用法規(guī)范化。

defineStore(name,options)

  • name: 必傳,類型string
  • options:{}
import { defineStore } from 'pinia'
// useStore可以是任何類似useUser、useCart的東西
// 第一個參數(shù)是應用程序中 Store 的唯一id
export const useStore = defineStore('main', {
  // state: () => ({ count: 0 }),
  state:()=>{
    return {
      // 所有這些屬性都將自動推斷其數(shù)據(jù)類型
      items: [],
      counter: 0,
      name: 'Eduardo',
      isAdmin: true,
    }
  },
  getters: {
    doubleCount: (state) => state.counter * 2,
    //doubleCount(state){
    //  console.log(this,'想要在getter中獲取該store的其他內(nèi)容則不能用箭頭函數(shù),')
    //  return state.counter * 2
    //},
  },
  actions: {
    increment(num,test1,test2) {
      console.log(num,test1,test2)
      this.counter++
    },
    randomizeCounter() {
      this.counter = Math.round(100 * Math.random())
    },
  }
})

3.3 使用 Store

我們之所以聲明store,是因為在setup()內(nèi)部調用useStore()之前不會創(chuàng)建存儲。

<template>
  <p>Double count is {{ store.doubleCount }}</p>
</template>
<script>
import { mapState } from 'pinia'
import { useStore} from '@/stores/counter'
export default {
  setup() {
    const store = useStore()
    store.counter++
    store.$patch({ // 除了直接用store.counter++改變store之外,您還可以調用該$patch方法。state它允許您對部分對象同時應用多個更改:
      counter: store.counter + 1,
      name: 'Abalam',
    })
 
    store.$patch((state) => { // $patch 方法還接受一個函數(shù),用于應對復雜數(shù)據(jù)的修改過程
      state.items.push({ name: 'shoes', quantity: 1 })
      state.isAdmin = false
    })
 
    store.increment(9,'測試多參數(shù)1','測試2') // 調用 actions 并傳入?yún)?shù)
    store.randomizeCounter() // 調用 actions
    return {
      // 您可以返回整個store實例以在模板中使用它
      store,
    }
  },
  computed: { 
    storeCounter() {
      return this.store.counter * 3
    },
    // ...mapState(useCounterStore, ['counter']) // 沒有 setup 的時候才使用這方式
  },
}
</script>

4.Vuex vs Pinia

現(xiàn)在我們來比較 Vuex 和 Pinia 的優(yōu)缺點。

4.1 API 和易用性

Vuex:

采用認證的 Flux 風格,有一定的學習曲線,需要掌握多個概念(狀態(tài)、getter、mutation、action)。對于小型應用來說,可能會顯得過于復雜。

Pinia:

設計更為簡單,結合了 Composition API,讓開發(fā)者能夠更直觀地管理狀態(tài)。尤其是 Vue 3 的 Setup 語法糖,使用更加直觀。

4.2 響應式

Vuex: 響應式總是要依賴于 Vue 的響應式系統(tǒng),并且有多種約定(例如 Mutation),使用中需要更小心。

Pinia:

完全基于 Vue 3 的響應式系統(tǒng),狀態(tài)變化后組件自動更新,無需額外的處理。

#前端學習#
全部評論
寫的好棒
點贊 回復 分享
發(fā)布于 04-23 01:33 陜西

相關推薦

暑期是進不了大廠了想問問前端友友們&nbsp;,后面應該如何沉淀自己,我想秋招再沖一下尤其是八股,應該抓哪一塊是重點,理解到什么程度呢,要學到什么深度才能抗住拷打。還有場景題如何去準備。期待友友們的解答。
命烈焰帶我飛走:找個中廠小廠先看看吧,去了熟悉熟悉項目,簡歷上扒點東西,之后刷刷sobb上百度美團快手的日常實習,流程都比較快輪次也少,別給自己太大壓力,一步一步來,先不用想著暑期,轉正,秋招那些事情,另外如果可能的話可以關注下面試時候的形象,穿搭,環(huán)境這些,其實實習主要就是看個眼緣,看著好看聲音好聽其實加分不少..八股這些不要死記硬背,挨個拿去問問chatgpt,這個東西做出來是為了解決什么問題,有啥效果,自己有想法有個模糊的概念就可以了,人家也知道你是學生,實習生沒有什么kpi,放你去面都是希望能把你招進去的,場景題算法題沒做過你可以邊試著寫邊跟面試官說你的想法思路,也可以直說沒見過讓他們給你提示,反正最后都是與或非順序分支循環(huán)存取值那套。總之建議是別為了秋招..出去旅旅游放松放松,少投幾家少背八股多寫寫代碼
點贊 評論 收藏
分享
評論
4
2
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務