最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vuex5中的Pinia插件機制

 更新時間:2022年07月21日 11:41:32   作者:神奇大叔  
這篇文章主要介紹了vuex5中的Pinia插件機制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vuex5 Pinia插件機制

通過插件擴展

  • .給每個store添加公共屬性
  • .給stores添加新的配置
  • .給stores添加新的方法
  • .包裹重用已有方法
  • .改變或者取消actions
  • .應用額外的副作用像localstorage
  • .應用給指定的store

1、使用

import { createPinia } from 'pinia'
const pinia = createPinia()

(1)定義插件

function SecretPiniaPlugin(context) {
context.pinia; ?pina實例`createPinia()`
context.app; ?vue實例`createApp()`
context.store; ? 正在配置的store
context.options; ?store的配置`defineStore()`
  • (1)設置響應式數(shù)據(jù)

每個store都是reactive包裹的對象,所以使用起來可直接解套ref

context.store.hello = ref('secret');
context.store.hello;
  • (2)state添加數(shù)據(jù)
const globalSecret = ref('secret')

可直接添加

store.secret = globalSecret

通過$state,可獲得devtools追蹤、ssr中進行序列化

store.$state.secret = globalSecret

添加第三方數(shù)據(jù),不要求響應式時,需要使用markRow進行轉(zhuǎn)換

store.router = markRaw(router)
  • (3)添加監(jiān)聽器
? store.$subscribe(() => {
? store改變時觸發(fā)
? })
? store.$onAction(() => {
? ? ?action觸發(fā)時觸發(fā)
? })
...
}

(2)應用插件

pinia.use(SecretPiniaPlugin)

(3)devTools能追蹤修改

方式一:返回修改的操作

pinia.use(({ store }) => ({
? store.hello = 'world'
}))

方式二:顯示添加

pinia.use(({ store }) => {
? store.hello = 'world'
? if (process.env.NODE_ENV === 'development') {
? ? store._customProperties.add('hello')
? }
})

2、應用

(1)給每個store添加公共state

function SecretPiniaPlugin() {
? return { secret: 'the cake is a lie' }
}
pinia.use(SecretPiniaPlugin)

(2)改寫store中的action

.此例為改寫成防抖action

defineStore('search', {
? actions: {
? ? searchContacts() {
? ? },
? },
? debounce: {
? ? searchContacts: 300,
? },
})

對于函數(shù)寫法的store,自定義選項放入第三個參數(shù)中

defineStore(
? 'search',
? () => {
? ? ...
? },
? {
? ? // this will be read by a plugin later on
? ? debounce: {
? ? ? // debounce the action searchContacts by 300ms
? ? ? searchContacts: 300,
? ? },
? }
)

插件中: 

import debounce from 'lodash/debunce'
pinia.use(({ options, store }) => {
? if (options.debounce) {
??
? ? 將設置了debounce的store中的原action改寫成具有防抖功能的action
? ??
? ? return Object.keys(options.debounce).reduce((debouncedActions, action) => {
? ? ? debouncedActions[action] = debounce(
? ? ? ? store[action],
? ? ? ? options.debounce[action]
? ? ? )
? ? ? return debouncedActions
? ? }, {})
? }
})

pinia和vuex的區(qū)別

(1)它沒有mutation,他只有state,getters,action【同步、異步】使用他來修改state數(shù)據(jù)

(2)他默認也是存入內(nèi)存中,如果需要使用本地存儲,在配置上比vuex麻煩一點

(3)語法上比vuex更容易理解和使用,靈活。

(4)pinia沒有modules配置,沒一個獨立的倉庫都是definStore生成出來的

(5)state是一個對象返回一個對象和組件的data是一樣的語法

 需要在頁面組件中引入我們要修改數(shù)據(jù)

安裝的本地存儲插件可以是npm也可以是year

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

启东市| 通江县| 滦平县| 浪卡子县| 绥宁县| 彭泽县| 新乐市| 武威市| 安仁县| 沙田区| 肇源县| 曲靖市| 大荔县| 汾西县| 藁城市| 阿瓦提县| 扎兰屯市| 庆元县| 孝感市| 晋宁县| 比如县| 于田县| 洛隆县| 广元市| 郑州市| 天长市| 泽州县| 芜湖县| 台南市| 宁强县| 南召县| 利辛县| 万年县| 华容县| 海门市| 长岭县| 镇原县| 广丰县| 托克逊县| 揭阳市| 溧阳市|