在react项目开发中,reducer相关的hooks(useDispatch、useStore、useSelector)在大量状态管理以及回调data的存取是极为方便的,尤其是useState逐渐的被取代的情况下。
reducer如此多的状态存取,包括type类型。所以引入 KeyMirror 既能保证代码前后的功能一致,也能享受压缩带来的性能提升。
但并不是为了省字符,而是在 Closure Compiler 的高级模式下,Object 的 key 会被压缩替换成更短的字符,这样就不能创建一个 key 跟 value 相等的 Object 了。keyMirror 就是解决这个问题的。
// 代码
var obj = {
ASDF_GHJK_KLOI: null,
QWE_RTT_YUU: null,
QW_WE_RT_VB: null
};
var newObj = keyMirror(obj);
console.log(newObj.ASDF_GHJK_KLOI);
// 编译后
var a = keyMirror({ a: null, c: null, b: null });
console.log(a.a);
KeyMirror顾名思义,其功能就是让 Key,Value相等。
以下是keymirror的源码
var keyMirror = function(obj) {
var ret = {};
var key;
if (!(obj instanceof Object && !Array.isArray(obj))) {
throw new Error('keyMirror(...): Argument must be an object.');
}
for (key in obj) {
if (!obj.hasOwnProperty(key)) {
continue;
}
ret[key] = key;
}
return ret;
};
可以看出返回的是一个{a: a, b: b}的对象