本文是深入浅出的ahooks源码系列文章的第十篇。本系列已整理成文档地址。觉得还不错,点个赞支持一下,谢谢。今天我们就来说说ahooks中管理Map和Set类型状态的hook,顺便复习一下Set和Map这两种数据类型。useMap是一个管理Map类型状态的Hook。下面先回顾一下Map的概念。映射对象保存键值对并且能够记住键的原始插入顺序。任何值(对象或原始类型)都可以用作键或值。对象类似于地图。它们都允许您通过键访问值、删除键以及检查键是否绑定到值。所以过去我们一直使用对象作为Map。但是在某些场景下,使用Map是更好的选择,以下是一些共同点:keyvalue的类型。Map的键可以是任何值,包括函数、对象或任何原始类型。对象的键必须是字符串或符号。需要保证键值的顺序。Map中的键是有序的。因此,在迭代时,Map对象按插入顺序返回键。虽然Object的键当前是有序的,但情况并非总是如此,而且这种排序很复杂。因此,最好不要依赖属性的顺序。尺寸。Map中键值对的个数可以很容易的通过size属性获取。Object的key-value对的个数只能手动计算。比如遍历对象属性,计算其个数。表现。Map在频繁增删键值对的场景下表现更好。对象未针对频繁添加和删除键值对进行优化。有关更多信息,请参阅对象和地图的比较。我们先看看封装ahooks做了什么,再回顾下Map的一些基本API用法。首先是默认值的设置,通过Map构造函数newMap()创建Map对象。输入参数为默认值。functionuseMap(//传入默认的Map参数initialValue?:Iterable,){constgetInitValue=()=>{returninitialValue===undefined?新地图():新地图(初始值);};const[map,setMap]=useState