国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue狀態(tài)管理庫(kù)-Pinia

這篇具有很好參考價(jià)值的文章主要介紹了Vue狀態(tài)管理庫(kù)-Pinia。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、Pinia是什么?

Pinia 是 Vue 的專(zhuān)屬狀態(tài)管理庫(kù),它允許支持跨組件或頁(yè)面共享狀態(tài),即共享數(shù)據(jù),他的初始設(shè)計(jì)目的是設(shè)計(jì)一個(gè)支持組合式API的 Vue 狀態(tài)管理庫(kù)(因?yàn)関ue3一個(gè)很大的改變就是組合式API),當(dāng)然這并不是說(shuō)Pinia只支持vue3,他是同時(shí)支持vue2和vue3的,本文傾向于擁抱Vue3,所以代碼語(yǔ)法都是傾向用組合式api的寫(xiě)法

二、在vue3中使用Pinia

下面的流程和相關(guān)代碼均基于vue3項(xiàng)目

1、安裝pinia

npm install pinia

或用yarn安裝

yarn add pinia

package.json中看到pinia表示安裝成功?

Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

2、創(chuàng)建pinia實(shí)例并將其傳遞給應(yīng)用

//src/main.js

//創(chuàng)建應(yīng)用實(shí)例
import { createApp } from "vue";
import App from "./App.vue";
let app = createApp(App);

//pinia實(shí)例
import { createPinia } from "pinia";
let pinia = createPinia();
app.use(pinia);

app.mount("#app");

掛載完成后,我們就可以在Vue的devtools里看到Pinia了

3、定義Store

Store 是用?defineStore()?定義的,它的第一個(gè)參數(shù)要求是一個(gè)獨(dú)一無(wú)二的名字,在整個(gè)應(yīng)用中保持唯一,?返回的函數(shù)命名為?use...?是一個(gè)符合組合式函數(shù)風(fēng)格的約定

import { defineStore } from "pinia";

//命名規(guī)則,建議以 `use` 開(kāi)頭且以 `Store` 結(jié)尾,即 use~~~Store
export const useMapStore = () => {

    // 其他配置...
}

Setup store(Option Store可以查看官方,本文不列舉)

import { defineStore } from "pinia";
import { reactive, computed } from "vue";
import type { City, Province } from "@/interface/common";

export const useMapStore = defineStore("mapStore", () => {
  //state
  let cityList = reactive<Array<City>>([]);
  let provinceList = reactive([]);

  //getter
  const simpleCityList = computed(() => {
    return cityList.filter((item) => item.code != "110000");
  });

  //actions
  function changeCityList(list: City[]) {
    console.log("修改城市列表數(shù)據(jù)的事件被觸發(fā)");
    cityList = Object.assign(cityList, list);
  }
  function changeProviceList(list: Province[]) {
    console.log("修改省份列表數(shù)據(jù)的事件被觸發(fā)");
    provinceList = Object.assign(provinceList, list);
  }

  return {
    cityList,
    provinceList,
    simpleCityList,
    changeCityList,
    changeProviceList,
  };
});

?

4、使用store

<template>
    <div>您好!歡迎來(lái)到星野的小世界</div>
    <div>星野的目標(biāo)是走遍中國(guó)的每一個(gè)省,中國(guó)的省如下:</div>
    <div>
        <ul>
            <li v-for="city in cityList" :key="city.code">
                {{ city.name }}
            </li>
        </ul>
    </div>
</template>

<script setup lang='ts' name='Login'>
import { onMounted} from 'vue';
import { storeToRefs } from 'pinia';
import { getCityList } from "@/utils/common";
import { useMapStore } from '@/stores/map'

let mapStore = useMapStore()
let { cityList } = storeToRefs(mapStore) //為了從 store 中提取屬性時(shí)保持其響應(yīng)性,需要使用 storeToRefs()。它將為每一個(gè)響應(yīng)式屬性創(chuàng)建引用

onMounted(async () => {
    let list = await getCityList()
    mapStore.changeCityList(list) //修改store里的屬性數(shù)據(jù)
})
</script>
<style lang='scss' scoped></style>

getCityList是一個(gè)工具函數(shù),調(diào)用一個(gè)免費(fèi)api獲取中國(guó)的城市數(shù)據(jù)?

Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

在?Setup Store?中:

  • ref()?/reactive ( ) 就是?state?屬性
  • computed()?就是?getters
  • function()?就是?actions

頁(yè)面效果

Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

5、修改store中的state

例如store中的state有一個(gè)城市統(tǒng)計(jì)屬性: cityCount

Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

在業(yè)務(wù)組件里,就可以通過(guò)mapStore.cityCount 直接修改數(shù)量

Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

?Vue狀態(tài)管理庫(kù)-Pinia,Vue,vue.js,前端,Pinia,狀態(tài)管理,vue狀態(tài)管理

如果state有很多屬性,還可以調(diào)用?$patch?方法。它允許你用一個(gè)?state?的補(bǔ)丁對(duì)象在同一時(shí)間更改多個(gè)屬性

 mapStore.$patch({
        cityCount: mapStore.cityCount + 1,
        provinceCount: mapStore.provinceCount + 1
    })

好啦,Pinia 滿(mǎn)足基礎(chǔ)使用的讀寫(xiě)改操作已經(jīng)描述完畢,關(guān)于搭配?Nuxt?的 Pinia 完成SSR,后續(xù)會(huì)單獨(dú)出文,敬請(qǐng)期待!??

ps: 學(xué)習(xí)成長(zhǎng)過(guò)程的簡(jiǎn)單記錄,如有不恰當(dāng)之處,歡迎交流文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836653.html

到了這里,關(guān)于Vue狀態(tài)管理庫(kù)-Pinia的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Vue全家桶】Pinia狀態(tài)管理

    【Vue全家桶】Pinia狀態(tài)管理

    ??這里是前端程序員小張! ??人海茫茫,感謝這一秒你看到這里。希望我的文章對(duì)你的有所幫助! ??愿你在未來(lái)的日子,保持熱愛(ài),奔赴山海! Pinia開(kāi)始于大概2019年,其目的是設(shè)計(jì)一個(gè)擁有 組合式 API 的 Vue 狀態(tài)管理庫(kù) 目前同時(shí)兼容Vue2、Vue3,也并不要求你使用Compositio

    2023年04月09日
    瀏覽(104)
  • vue3學(xué)習(xí)-Pinia狀態(tài)管理

    定義一個(gè)Store 這個(gè) name ,也稱(chēng)為 id ,是必要的,Pinia 使用它來(lái)將 store 連接到 devtools。 將返回的函數(shù)命名為 use… 是跨可組合項(xiàng)的約定,以使其符合你的使用習(xí)慣。 使用 store 一旦 store 被實(shí)例化,你就可以直接在 store 上訪問(wèn) state 、 getters 和 actions 中定義的任何屬性 store 是一

    2024年02月14日
    瀏覽(17)
  • vue3 快速入門(mén)系列 —— 狀態(tài)管理 pinia

    vue3 快速入門(mén)系列 —— 狀態(tài)管理 pinia

    其他章節(jié)請(qǐng)看: vue3 快速入門(mén) 系列 vue3 狀態(tài)管理這里選擇 pinia。 雖然 vuex4 已支持 Vue 3 的 Composition API,但是 vue3 官網(wǎng)推薦新的應(yīng)用使用 pinia —— vue3 pinia redux、mobx、vuex、pinia都是集中式狀態(tài)管理工具。與之對(duì)應(yīng)的就是分布式。 Pinia 符合直覺(jué) 的 Vue.js 狀態(tài)管理庫(kù) 甚至讓你忘

    2024年04月26日
    瀏覽(17)
  • Vue最新?tīng)顟B(tài)管理工具Pinia——徹底搞懂Pinia是什么

    Vue最新?tīng)顟B(tài)管理工具Pinia——徹底搞懂Pinia是什么

    知識(shí)專(zhuān)欄 專(zhuān)欄鏈接 Vuex知識(shí)專(zhuān)欄 https://blog.csdn.net/xsl_hr/category_12158336.html?spm=1001.2014.3001.5482 Vuex官方文檔 https://vuex.vuejs.org/zh/ Pinia官方文檔 https://pinia.web3doc.top/ 最近在 前端的深入學(xué)習(xí)過(guò)程 中,接觸了與 狀態(tài)管理 相關(guān)的內(nèi)容,涉及到 與vue2適配的vuex 和 與vue3適配的pinia ,因此

    2024年02月03日
    瀏覽(53)
  • vue:狀態(tài)管理庫(kù)及其部分原理(Vuex、Pinia)

    多組件的狀態(tài)共享問(wèn)題: 當(dāng)多個(gè)組件需要訪問(wèn)和修改相同的數(shù)據(jù)時(shí),我們需要在組件之間傳遞 props或者使用事件總線。當(dāng),應(yīng)用就會(huì)變得難以維護(hù)和調(diào)試。 多組件狀態(tài)同步問(wèn)題: 當(dāng)一個(gè)組件修改了狀態(tài),其他組件可能無(wú)法立即得知該變化。 狀態(tài)變更的追蹤問(wèn)題: 無(wú)法追蹤

    2024年01月19日
    瀏覽(30)
  • Vue2向Vue3過(guò)度Vue3狀態(tài)管理工具Pinia

    Vue2向Vue3過(guò)度Vue3狀態(tài)管理工具Pinia

    Pinia 是 Vue 的專(zhuān)屬的最新?tīng)顟B(tài)管理庫(kù) ,是 Vuex 狀態(tài)管理工具的替代品 后面在實(shí)際開(kāi)發(fā)項(xiàng)目的時(shí)候,Pinia可以在項(xiàng)目創(chuàng)建時(shí)自動(dòng)添加,現(xiàn)在我們初次學(xué)習(xí),從零開(kāi)始: 使用 Vite 創(chuàng)建一個(gè)空的 Vue3項(xiàng)目 按照官方文檔安裝 pinia 到項(xiàng)目中 定義store 組件使用store Pinia中的 getters 直接使

    2024年02月11日
    瀏覽(55)
  • 深入 Pinia:從代碼出發(fā)探索 Vue 狀態(tài)管理的奧秘

    深入 Pinia:從代碼出發(fā)探索 Vue 狀態(tài)管理的奧秘

    ?? 項(xiàng)目地址:https://github.com/mk965/read-pinia ??????? 本節(jié)代碼:https://github.com/mk965/read-pinia/tree/article_1 ??源碼地址: github.com/vuejs/pinia ??打包文件: rollup.config.js ??入口文件: packages/pinia/src/index.ts 將 pinia/packages/pinia/src 目錄下的所有文件復(fù)制到我們之前生成項(xiàng)目的 /src

    2023年04月25日
    瀏覽(21)
  • vue 全局狀態(tài)管理(簡(jiǎn)單的store模式、使用Pinia)

    vue 全局狀態(tài)管理(簡(jiǎn)單的store模式、使用Pinia)

    多個(gè)組件可能會(huì)依賴(lài)同一個(gè)狀態(tài)時(shí),我們有必要抽取出組件內(nèi)的共同狀態(tài)集中統(tǒng)一管理,存放在一個(gè)全局單例中,這樣任何位置上的組件都可以訪問(wèn)其中的狀態(tài)或觸發(fā)動(dòng)作 通過(guò)自定義一個(gè)store模式實(shí)現(xiàn)全局的狀態(tài)管理,實(shí)例如下 有兩個(gè)組件a、b共享store和store2兩個(gè)狀態(tài),我們

    2024年02月13日
    瀏覽(21)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)狀態(tài)管理

    vue2(Vuex)、vue3(Pinia)、react(Redux)狀態(tài)管理

    Vuex 是一個(gè)專(zhuān)為 Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它使用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),以及規(guī)則保證狀態(tài)只能按照規(guī)定的方式進(jìn)行修改。 State(狀態(tài)) :Vuex 使用單一狀態(tài)樹(shù),即一個(gè)對(duì)象包含全部的應(yīng)用層級(jí)狀態(tài)。這個(gè)狀態(tài)樹(shù)對(duì)應(yīng)著一個(gè)應(yīng)用中的所有狀態(tài)。 Gett

    2024年01月23日
    瀏覽(27)
  • vue 3 第三十一章:狀態(tài)管理(Pinia基礎(chǔ)知識(shí))

    狀態(tài)管理是現(xiàn)代 Web 應(yīng)用開(kāi)發(fā)中的一個(gè)重要概念。Vue 3 中的狀態(tài)管理庫(kù) Pinia ,是一個(gè)基于 Vue 3 Composition API 的狀態(tài)管理庫(kù),它提供了一種 簡(jiǎn)單 、 靈活 的方式來(lái)管理應(yīng)用程序的狀態(tài),同時(shí)還具有 高性能 和 可擴(kuò)展性 。 Pinia 在某種程度上來(lái)說(shuō),也可以被叫做 Vuex5 ,因?yàn)樗Y(jié)合

    2024年02月07日
    瀏覽(292)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包