v3hooks --useMap

import { ref, Ref, markRaw } from 'vue';


type MapValue = readonly (readonly [any, any])[]

interface Actions<T>{
    set: ( key: string, value: T)=> void,
    get: ( key: string )=> T,
    remove: ( key: string )=> void,
    has: ( key: string )=> boolean,
    clear: ()=> void,
    setAll: (newMap: MapValue)=> void;
    reset: ()=> void,
}

function useMap <T = any>(initialValue?:MapValue) : [
    state: Ref<Map<any,any>>,
    actions: Actions<T>
]

function useMap<T = any>(initialValue?:MapValue){
    
    const initialMap = initialValue ? new Map(initialValue) :  new Map();
    const state = ref(initialMap) as Ref<Map<any,any>>;

    const actions:Actions<T> = {
        set:( key: any, value: T )=>{
            state.value.set(key,value);
        },
        get:( key: any )=>{
            return state.value.get(key);
        },
        remove: ( key: any )=>{
            state.value.delete( key );
        },
        has: ( key: any )=> state.value.has(key),
        clear: ()=> state.value.clear(),
        setAll: ( newMap: MapValue )=>{
            state.value = new Map(newMap);    
        },
        reset: ()=> state.value = initialMap
    };

    return [ state, markRaw(actions) ]
};

export default useMap

useMap

一个可以管理 Map 类型状态的 Hook。

使用Demo

<template>
  <div class="hello">
    <div>
      <p> value:{{ state }}</p>
      <button @click="()=> set('1',Math.random())">set</button>
      <button @click="()=> remove('1')">remove</button>
      <button @click="()=> setAll([ ['1','111'], ['2','2222'] ])">setAll</button>
    </div>
    
  </div>
</template>

<script lang="ts">
import { useSet, useMap } from "../../../dist/index.js";

export default {
  
  setup() {
    const [state, { set, setAll, remove }] = useMap([
      ['1','321']
    ]);
    return {
      state,
      set,
      setAll,
      remove
    };
  },
};
</script>

useMap接受一个 Map 可接受的参数, 并导出以下方法.

Api

type MapValue = readonly (readonly [any, any])[]

interface Actions<T>{
    set: ( key: string, value: T)=> void,
    get: ( key: string )=> T,
    remove: ( key: string )=> void,
    has: ( key: string )=> boolean,
    clear: ()=> void,
    setAll: (newMap: MapValue)=> void;
    reset: ()=> void,
}

function useMap <T = any>(initialValue?:MapValue) : [
    state: Ref<Map<any,any>>,
    actions: Actions<T>
]

Params

参数说明类型默认值
initialValue可选项,传入默认的 Map 参数readonly[any,any]-

Result

参数说明类型
stateMap 对象Map
set添加元素( key: string, value: T)=> void
get移除元素( key: string )=> T
remove移除元素( key: string )=> void
has判断是否存在元素( key: string )=> boolean
clear清空Map()=> void
setAll添加并生成一个新的 Map 对象(newMap: (readonly [any, any])[])=> void
reset重置为默认值()=> void
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值