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

vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除

這篇具有很好參考價值的文章主要介紹了vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除

使用背景

初始化一個完整數(shù)組,但在業(yè)務(wù)邏輯中會單獨更新或增刪其中的一部分或全部。

如果每次都是全部更新,直接使用set替換即可,但大部分?jǐn)?shù)組不變只修改個別數(shù)據(jù),直接替換的代價較大,因此維護一個增刪改的業(yè)務(wù)。

原來的數(shù)據(jù)都是有意義的,新數(shù)據(jù)可能是初始化的,不能直接替換成新數(shù)據(jù),新數(shù)據(jù)可能只是增刪了id,但是其他數(shù)據(jù)內(nèi)容還要繼續(xù)使用舊數(shù)據(jù)的,所以只能在舊數(shù)據(jù)基礎(chǔ)上進行維護

store中實現(xiàn)增刪改

import Vue from "vue"
import Vuex from "vuex"

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    list: [],
  },
  getters: {},
  mutations: {
    setList(state, list) {
      state.list = list;
    },
    addItem(state, item) {
      state.list.push(item);
    },
    updateItem(state, payload) {
      Vue.set(state.list, payload.index, payload.data);
    },
    deleteItem(state, lt) {
      let newIds = lt.map((item) => item.aid);
      state.list = state.list.filter((item) => newIds.includes(item.aid));
    },
  },
  actions: {}
})

export default store;

組件中維護數(shù)組,進行判斷

對象數(shù)組數(shù)據(jù)格式

[
  { "aid": "1", "aname": "111", "tobid": "1" }
  { "aid": "2", "aname": "ddd", "tobid": "2" }
]

組件中判斷

  1. 新建的時候進行判斷that.list.length == 0 || that.list == null,直接set賦值即可
  2. 如果不為0,說明已經(jīng)初始化并賦值,遍歷當(dāng)前數(shù)組(本文中數(shù)據(jù)來自后端)
    • id不存在(舊數(shù)組沒有而新數(shù)組有),則調(diào)用add添加
    • id存在需要判斷這個對象是否完全相同,不完全相同則調(diào)用update
  3. 最后調(diào)用delete,store中直接使用filter過濾掉新數(shù)組中有而舊數(shù)組沒有的對象(delete的邏輯可以單獨存在,不與更新一起)

自行修改使用:大更新需要add和delete,局部更新只有update

例如舊數(shù)組是【1,2】,新數(shù)組是【2,3】,經(jīng)過第二步之后,舊數(shù)據(jù)變?yōu)椤?,2,3】,但【1】是需要刪除的

<template>
  <div class="form-all">
    <el-button @click="getList()">getList</el-button>
    <el-button @click="clearStorage()">clear Local Storage</el-button>
    <div v-for="(item) in list" :key="item.aid">{{ item }}</div>
  </div>
</template>

<script>
import { mapState, mapMutations } from "vuex";

export default {
  name: "demo",
  data() {
    return {
      lit: [],
    };
  },
  components: {},
  computed: {
    ...mapState(["list"]),
  },
  methods: {
    ...mapMutations(["setList", "addItem", "updateItem", "deleteItem"]),
    clearStorage() {
      // localStorage.setItem("list", []);
      localStorage.removeItem('list');  
    },
    getList() {
      console.log(this.list.length);
      let that = this;
      this.axios
        .get('/abc/onetooneAnnote')
        .then((response) => {
          //返回結(jié)果
          let lt = response.data;
          this.setStore(lt);
        })
        .catch((error) => {
          console.log(error)
        })
    },
    setStore(lt) {
      let that = this;
      if (that.list.length == 0) {
        //初始化
        this.setList(lt);
      } else {
        let lit = that.list;
        lt.forEach((newItem, i) => {
          const index = lit.findIndex((litem) => litem.aid === newItem.aid);
          if (index == -1) {
            // 添加
            this.addItem(newItem);
          } else {
            const oldItem = lit[index];
            if (JSON.stringify(oldItem) != JSON.stringify(newItem)) {
              // 更新
              let payload = {
                data: newItem,
                index: index,
              }
              this.updateItem(payload);
            }
          }
        })
        //刪除
        this.deleteItem(lt);
      }
    },
  },
  mounted() {
  },
  created() {},
  destroyed() {},
  watch: {},
}
</script>

<style scoped>
</style>

<style></style>

存入localstorage并設(shè)置定時刪除

不刷新頁面,使用的vuex內(nèi)的值,刷新頁面才會重新從localstorage中獲取

自定義實現(xiàn)
  1. 使用subscribe監(jiān)聽指定的mutation方法,對應(yīng)方法調(diào)用則更新localstorage
  2. 實現(xiàn)函數(shù)setItemWithExpiry,將時間作為變量和數(shù)據(jù)整編成一個對象,存入localStorage,在subscribe時調(diào)用此函數(shù)
import Vue from "vue"
import Vuex from "vuex"

Vue.use(Vuex)

// 將數(shù)據(jù)存儲到LocalStorage并設(shè)置過期時間(毫秒)
function setItemWithExpiry(key, value, ttl) {
  const item = {
    value: value,
    expiry: new Date().getTime() + ttl,
  };
  localStorage.setItem(key, JSON.stringify(item));
}

const store = new Vuex.Store({
  state: {
    list: JSON.parse(localStorage.getItem("list")).value || [],
  },
  getters: {},
  mutations: {
    setList(state, list) {
      state.list = list;
    },
    addItem(state, item) {
      state.list.push(item);
    },
    updateItem(state, payload) {
      Vue.set(state.list, payload.index, payload.data);
    },
    deleteItem(state, lt) {
      let newIds = lt.map((item) => item.aid);
      state.list = state.list.filter((item) => newIds.includes(item.aid));
    },
  },
  actions: {}
})

// 監(jiān)聽訂閱
store.subscribe((mutation, state) => {
  if (['setList', 'addItem', 'updateItem', 'deleteItem'].includes(mutation.type)) {
    // 不設(shè)置定時刪除
    // localStorage.setItem('list', JSON.stringify(state.list));
    // 使用定時刪除
    setItemWithExpiry("list", state.list, 10 * 1000);
  }
});

export default store;

其中獲取vuex的值,如果每次都想直接從localstorage中讀取,可以使用store的getters屬性

  getters: {
    getList: (state) => {
      return state.list;
    },
  },

組件中使用

<div v-for="(item) in getList" :key="item.aid">{{ item }}</div>

import { mapGetters } from "vuex";

  computed: {
    ...mapGetters(['getList']),
  },
使用storage-timing插件

官方github地址:https://github.com/xxwwp/StorageTiming/blob/main/docs/zh.md文章來源地址http://www.zghlxwxcb.cn/news/detail-425645.html

調(diào)用定時刪除

  1. 設(shè)置定時器,可以在App.vue中全局設(shè)置
  2. checkExpiry可以遍歷全部localstorage,也可以只關(guān)注某幾個變量
<template>
  ...
</template>

<script>
export default {
  data() {
    return {
      timer: "",
    }
  },
  components: {},
  methods: {
    getItemWithExpiry(key) {
      const itemStr = localStorage.getItem(key);
      if (!itemStr) {
        return null;
      }
      const item = JSON.parse(itemStr);
      const currentTime = new Date().getTime();
      if (currentTime > item.expiry) {
        // 如果數(shù)據(jù)已經(jīng)過期,刪除它
        localStorage.removeItem(key);
        return null;
      }
      return item.value;
    },
    // 檢查LocalStorage中的數(shù)據(jù)是否過期
    checkExpiry() {
      this.getItemWithExpiry("list");
      // for (let i = 0; i < localStorage.length; i++) {
      //   const key = localStorage.key(i);
      //   getItemWithExpiry(key);
      // }
    },
    startCheck(){
      let that = this;
      this.timer = setInterval(() => { //開啟定時器
        console.log("check localstorage");
        that.checkExpiry()
      }, 1000)
    }
  },
  mounted() {
    this.startCheck();
  },
  beforeDestroy(){
    clearInterval(this.timer)//組件銷毀之前清掉timer
  },
  computed: {},
  created() {

  },

}
</script>

<style scoped></style>
<style></style>

最終效果

  • 初始化
    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除
  • 新增
    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除
  • 更新和刪除
    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除
  • 谷歌瀏覽器查看localstorage(F12 --> Application -->Storage)
    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除
  • localstorage定時刪除
    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除

到了這里,關(guān)于vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 原生JavaScript實現(xiàn)本地存儲(localStorage)和會話存儲(sessionStorage)

    目錄 一、簡單介紹 二、localStorage本地存儲 三、sessionStorage會話存儲 本地存儲和會話存儲的目的,是將所輸入的文件存入到瀏覽器中,在需要的時候,直接調(diào)用,但是本地存儲和會話存儲有著一定的區(qū)別,本地存儲,在不主動刪除的情況下,會一直保留在瀏覽器中,會話存儲是

    2023年04月08日
    瀏覽(32)
  • Vue中如何進行本地存儲(LocalStorage)

    Vue中如何進行本地存儲(LocalStorage)

    在Vue.js應(yīng)用程序中,本地存儲(LocalStorage)是一個強大的工具,用于在瀏覽器中保存和檢索數(shù)據(jù)。它允許您在不使用服務(wù)器或后端數(shù)據(jù)庫的情況下,在用戶的瀏覽器中存儲數(shù)據(jù),以實現(xiàn)數(shù)據(jù)的持久性。本地存儲對于保存用戶首選項、用戶身份驗證令牌、購物車數(shù)據(jù)等場景都非

    2024年02月07日
    瀏覽(24)
  • HarmonyOS—LocalStorage:頁面級UI狀態(tài)存儲

    HarmonyOS—LocalStorage:頁面級UI狀態(tài)存儲

    LocalStorage是頁面級的UI狀態(tài)存儲,通過@Entry裝飾器接收的參數(shù)可以在頁面內(nèi)共享同一個LocalStorage實例。LocalStorage也可以在UIAbility實例內(nèi),在頁面間共享狀態(tài)。 本文僅介紹LocalStorage使用場景和相關(guān)的裝飾器:@LocalStorageProp和@LocalStorageLink。 說明 本模塊從API version 9開始支持。 L

    2024年02月22日
    瀏覽(14)
  • 鴻蒙Harmony--LocalStorage--頁面級UI狀態(tài)存儲詳解

    鴻蒙Harmony--LocalStorage--頁面級UI狀態(tài)存儲詳解

    走的太急疼的是腳,逼的太緊累的是心,很多時候,慢一點也沒關(guān)系,多給自己一些耐心和等待,保持熱愛,當(dāng)下即是未來,生活自有安排!? 目錄 一,定義 二,@LocalStorageProp定義 三,@LocalStorageProp裝飾器使用規(guī)則說明 ?四,@LocalStorageProp變量的傳遞/訪問規(guī)則說明 ?五,@Loc

    2024年01月20日
    瀏覽(24)
  • 利用HTML5存儲對象:localStorage和sessionStorage解析

    前端朋友們,你是否曾為如何在用戶的瀏覽器中存儲數(shù)據(jù)而感到困擾?你是否想過,如果可以在用戶的瀏覽器中存儲一些數(shù)據(jù),那么我們的應(yīng)用程序?qū)兊枚嗝磸姶??如果你的答案是肯定的,那么本文將為你解鎖一種新的能力——使用HTML5的localStorage和sessionStorage。 HTML5引入

    2024年02月05日
    瀏覽(17)
  • 【溫故而知新】HTML5存儲localStorage/sessionStorage

    HTML5是HTML的最新版本,它引入了許多新的元素和功能,以適應(yīng)現(xiàn)代網(wǎng)頁開發(fā)的需求。以下是HTML5的一些主要特點: 新增語義元素 :HTML5引入了許多新的語義元素,如 header、footer、article、section 等,這些元素有助于提高網(wǎng)頁的結(jié)構(gòu)化和可訪問性。 媒體支持 :HTML5引入了 audio 和

    2024年01月18日
    瀏覽(96)
  • 前端數(shù)據(jù)存儲系列(Cookie、Session、localStorage、sessionStorage、Token)

    前端數(shù)據(jù)存儲系列(Cookie、Session、localStorage、sessionStorage、Token)

    簡述: Session比Cookie安全,Session是存儲在服務(wù)器端的,Cookie是存儲在客戶端的 背景: HTTP 是無狀態(tài)協(xié)議,說明它不能以狀態(tài)來區(qū)分和管理請求和響應(yīng)。也就是說,服務(wù)器單從網(wǎng)絡(luò)連接上無從知道客戶身份。 于是想說客戶端們頒發(fā)一個通行證吧,每人一個,無論誰訪問都必須

    2023年04月24日
    瀏覽(24)
  • C語言 讀取TXT文件并存入結(jié)構(gòu)體數(shù)組

    C語言 讀取TXT文件并存入結(jié)構(gòu)體數(shù)組

    要讀取的文件:(數(shù)據(jù)之間以制表符分割)? 定義結(jié)構(gòu)體 文件讀取并存入結(jié)構(gòu)體數(shù)組: ?完整代碼:

    2024年02月12日
    瀏覽(14)
  • 【微信小程序】使用云存儲存入指定文件夾

    【微信小程序】使用云存儲存入指定文件夾

    在我們開發(fā)微信小程序的時候常會用到 云開發(fā) 的功能,它相 比傳統(tǒng)的SQL上手難度低 ,比較適合沒有什么后端基礎(chǔ)的開發(fā)者使用。在具體的項目需求中我們會 讓用戶上傳一些圖片或者表格,隨著用戶量增大,文件類型增多,云存儲分類顯得尤其重要 。下面我舉一個例子來帶

    2024年02月12日
    瀏覽(19)
  • 用c語言如何用二維數(shù)組存入多個字符串

    用 c 語言如何用二維數(shù)組存儲多個字符串呢? 首先,需要確定要存儲的字符串的個數(shù)和每個字符串的長度。然后定義一個二維數(shù)組,其中第一維表示字符串的個數(shù),第二維表示每個字符串的長度。 例如,假設(shè)要存儲 3 個字符串,每個字符串的長度都是 10,則可以使用如下代

    2024年02月05日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包