欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3項(xiàng)目使用pinia狀態(tài)管理器的使用

 更新時(shí)間:2024年05月28日 10:08:46   作者:我愛加班、、  
Pinia是一個(gè)專為Vue3設(shè)計(jì)的現(xiàn)代化狀態(tài)管理庫(kù),本文主要介紹了vue3項(xiàng)目使用pinia狀態(tài)管理器的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

1、首先安裝pinia

yarn add pinia
# 或使用npm
npm install pinia

2、在項(xiàng)目的src目錄下新建store文件夾,然后store目錄下新建index.js / index.ts :

我這里是index,js

import { createPinia } from "pinia"

// 創(chuàng)建 Pinia 實(shí)例
const pinia  = createPinia()

// 導(dǎo)出 Pinia 實(shí)例以便將其與應(yīng)用程序?qū)嵗P(guān)聯(lián)
export default pinia

3、 接著在項(xiàng)目入口文件main.js 或 main.ts 引入并使用:

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router/router'
import store from './store/index'

createApp(App)
    .use(router)
    .use(store)
    .mount('#app')

4、然后使用defineStore來(lái)定義狀態(tài)存儲(chǔ)模塊,一般使用useXXXXXStore 來(lái)約定俗成的命名規(guī)范, 我這里是user.js:

import { defineStore } from "pinia"

export const useUserStore = defineStore({
    //id 是為了更好地區(qū)分模塊
    id: 'user',
    state: () => ({
        name: 'Tony',
        age: 18,
        count: 0
    }),
    getters: {
        doubleCount: (state) => state.count * 2,
    },
    actions: {
        // 定義操作或異步請(qǐng)求
        increment() {
            // 這里訪問state的數(shù)據(jù)不再是state.XXX,而是通過(guò)this
            this.count++
        }
    }
})

 5、在組件內(nèi)使用store:

<template>
  <div>
    <h3>我是測(cè)試pinia狀態(tài)存儲(chǔ)的組件,我有一個(gè)子組件</h3>
    <div>userStore里的state數(shù)據(jù):</div>
    <span>姓名: {{ name }}</span>   <span>年齡: {{ age }}</span>
    <div><button @click="handleIncre">修改count:</button>count: {{ count }}</div>
    <!-- 直接調(diào)用getters的方法 -->
    <div> Double count is: {{ doubleCount }}</div>
  </div>
</template>

js:

<script setup>
import { ref, reactive } from 'vue'
import TestChild1 from './component/TestChild1.vue'
import { useUserStore } from '../../store/user';
import { storeToRefs } from 'pinia'

const userStore = useUserStore()
// 通過(guò)storeToRefs包裹,解構(gòu)出來(lái)的屬性/方法才有響應(yīng)式
const { name, age, count,  doubleCount} = storeToRefs(userStore)
// console.log('userStore:', userStore.name, userStore.age, userStore.count)
// console.log(name.value, age.value, count.value);

// 調(diào)用store的actions的increment方法
const handleIncre = () => {
    userStore.increment()
}

</script>

解構(gòu)store的變量或方法時(shí),如果沒有通過(guò)storeToRefs包裹,就失去了響應(yīng)式:

具有響應(yīng)式:

6、在store中定義異步獲取用戶信息方法:

6.1首先新建一個(gè)api文件夾定義模擬異步登錄獲取用戶登錄信息接口方法:

~~src/api/index

// 模擬異步登錄獲取用戶信息
const loginUser = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                name: 'Tony',
                age: 18
            })
        }, 2000)
    })
}

export default {
    loginUser
}

6.2 在store,user.js中: 

引入api文件,在actions中定義getUserInfo方法,異步查詢時(shí),通常都是async和await一起搭配使用的。

import { defineStore } from "pinia"
import API from '../api/index'

export const useUserStore = defineStore({
    //id 是為了更好地區(qū)分模塊
    id: 'user',
    state: () => ({
        name: 'Tony',
        age: 18,
        count: 0,
        userInfo: {}
    }),
    getters: {
        doubleCount: (state) => state.count * 2,
    },
    actions: {
        // 定義操作或異步請(qǐng)求
        increment() {
            // 這里訪問state的數(shù)據(jù)不再是state.XXX,而是通過(guò)this
            this.count++
        },
        // 在actions中異步獲取loginUser的數(shù)據(jù)
        async getUserInfo() {
            this.userInfo = await API.loginUser()
            console.log('user-info', this.userInfo);
        }
    }
})

 6.3 在vue組件中使用:

<!-- 點(diǎn)擊---異步登錄獲取userInfo -->
    <button @click="getUser">異步登錄獲取userInfo</button>
    <div>userInfo: {{ userInfo }}</div>
// 調(diào)用store的actions的getUserInfo方法異步獲取用戶登錄信息
const getUser = () => {
  userStore.getUserInfo()
}

 以上就是pinia的vue3使用,后面更新持續(xù)化存儲(chǔ)。更多相關(guān)vue3 pinia狀態(tài)管理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3使用拖拽組件draggable.next的保姆級(jí)教程

    vue3使用拖拽組件draggable.next的保姆級(jí)教程

    做項(xiàng)目的時(shí)候遇到了一個(gè)需求,拖拽按鈕到指定位置,添加一個(gè)輸入框,這篇文章主要給大家介紹了關(guān)于vue3使用拖拽組件draggable.next的保姆級(jí)教程,需要的朋友可以參考下
    2023-06-06
  • 基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn)

    基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn)

    這篇文章主要介紹了基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue實(shí)現(xiàn)At人文本輸入框示例詳解

    vue實(shí)現(xiàn)At人文本輸入框示例詳解

    這篇文章主要為大家介紹了vue實(shí)現(xiàn)At人文本輸入框示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue的虛擬DOM使用方式

    vue的虛擬DOM使用方式

    這篇文章主要介紹了vue的虛擬DOM使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • vue+element樹組件 實(shí)現(xiàn)樹懶加載的過(guò)程詳解

    vue+element樹組件 實(shí)現(xiàn)樹懶加載的過(guò)程詳解

    這篇文章主要介紹了vue+element樹組件 實(shí)現(xiàn)樹懶加載的過(guò)程,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 1分鐘Vue實(shí)現(xiàn)右鍵菜單

    1分鐘Vue實(shí)現(xiàn)右鍵菜單

    今天給大家分享的是,如何在最短的時(shí)候內(nèi)實(shí)現(xiàn)右鍵菜單。高效實(shí)現(xiàn)需求,避免重復(fù)造輪子。感興趣的可以了解一下
    2021-10-10
  • vue踩坑記錄之?dāng)?shù)組定義和賦值問題

    vue踩坑記錄之?dāng)?shù)組定義和賦值問題

    這篇文章主要給大家介紹了關(guān)于vue踩坑記錄之?dāng)?shù)組定義和賦值問題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Vue中

    Vue中"This dependency was not found"問題的解決方法

    這篇文章主要介紹了Vue中"This dependency was not found"的問題的解決方法,需要的朋友可以參考下
    2018-06-06
  • 使用Vue3和Plotly.js繪制交互式漏斗圖的示例代碼

    使用Vue3和Plotly.js繪制交互式漏斗圖的示例代碼

    漏斗圖常用于可視化業(yè)務(wù)流程中的各個(gè)階段的轉(zhuǎn)換率,例如銷售漏斗或營(yíng)銷漏斗,它可以幫助用戶識(shí)別流程中的瓶頸和改進(jìn)機(jī)會(huì),本文給大家介紹了如何使用Vue3和Plotly.js繪制交互式漏斗圖,,文中有相關(guān)代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • vue實(shí)現(xiàn)鼠標(biāo)滑動(dòng)預(yù)覽視頻封面組件示例詳解

    vue實(shí)現(xiàn)鼠標(biāo)滑動(dòng)預(yù)覽視頻封面組件示例詳解

    這篇文章主要為大家介紹了vue實(shí)現(xiàn)鼠標(biāo)滑動(dòng)預(yù)覽視頻封面組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論