normalizr实践使用


原数据

(自编数据,本数据仅供参考)

var aaaObj ={
"id" : "00000000000000000000000000005187",
"eshop_id" : "",
"categorylist" : [
{
"id": "434b927779aac23a2c1e1e3a82988ffb",
"name": "休闲零食",
"children": [
{
"id": "984c93f9be8e4aad35f70314f8602556",
"name": "果干蜜饯",
"aaa":[
{
"ccc":"1",
"aa":"11",
"bb":"22"
},
]
}, {
"id": "86f6d05d71d5c126063f2b2e3ad2eba0",
"name": "肉干肉脯",
"aaa":[
{
"ccc":"2",
"aa":"11",
"bb":"22"
},
]
}, {
"id": "29a5f4195ce5950a053e5513f26b3de5",
"name": "膨化食品",
"aaa":[
{
"ccc":"3",
"aa":"11",
"bb":"22"
},
]
}
]
}, {
"id": "a0679cba84a70cb735373a128bfcf912",
"name": "酒",
"children": [
{
"id": "6ac3faa1324946e8bf670c6bde4b7725",
"name": "白酒"
}, {
"id": "ff4b63978e4b1e76d131ce755b2c2fbe",
"name": "水类"
}
]
}
],
"prolist" : [
{
"id": "062820bde7a686df1bbc61bcd0a67097",
"eshop_id": "00000000000000000000000000005187",
"is_combo": "no",
"is_combo_split": "no",
"content_name": "圆蓝蓝莓果脯40g",
"off_price": "13.00",
}
],
"totalpage" : 1
}

normalizr 处理

import { schema } from 'normalizr';
/* product Schema */
const product = new schema.Entity('products');
export const arrayOfProducts = [product];
/* category Schema */
const firstCategory = new schema.Entity('firstCategories',{}, { idAttribute: 'id' }); //默认为id可不设置
const secondCategory = new schema.Entity('secondCategories');
const threeCategory = new schema.Entity('threeCategory',{},{ idAttribute: 'ccc' }); //设置主键为ccc,不设置时默认为id
firstCategory.define({
children: [secondCategory], //数组形式会返回result
productIds: arrayOfProducts, //arrayOfProducts = [product];
});
secondCategory.define({
aaa:[threeCategory] //分离出三级菜单(threeCategory),用二级菜单填充(secondCategories),主键为ccc
})
/* eshop Schema */
export const eshopSchema = {
categoryIds: [firstCategory], //由于categoryIds是数组,所以firstCategory形式是[firstCategory]
productIds: [product],
};
// 处理接口返回的数据, 格式化如下:
// {
// shopInfo: {...}
// categoryIds: [...]
// productIds: [....]
// }
//处理数据中的key值
export function formatEshopData(rawObj) {
const obj = rawObj;
Object.keys(obj).forEach((key) => {
if (key === 'prolist') {
obj.productIds = obj[key];
delete obj[key];
}
if (key === 'categorylist') {
obj.categoryIds = obj[key];
delete obj[key];
}
});
return obj;
}
/* emall Schema */
export const emallSchema = eshopSchema;
export function formatEMallData(rawObj) {
const obj = rawObj;
Object.keys(obj).forEach((key) => {
if (key === 'prolist') {
obj.productIds = obj[key];
delete obj[key];
}
if (key === 'categorylist') {
obj.categoryIds = obj[key];
delete obj[key];
}
});
return obj;
}
/* catpro Schema */
export const catproSchema = emallSchema;
export const formatCatproData = formatEMallData;

normalizr 后

    import { normalize } from 'normalizr';
const response = normalize(schema.formatEshopData(aaaObj), schema.eshopSchema);
console.log(end)

var end = {
"entities": {
"threeCategory": {
"1": {
"ccc": "1",
"aa": "11",
"bb": "22"
},
"2": {
"ccc": "2",
"aa": "11",
"bb": "22"
},
"3": {
"ccc": "3",
"aa": "11",
"bb": "22"
}
},
"secondCategories": {
"984c93f9be8e4aad35f70314f8602556": {
"id": "984c93f9be8e4aad35f70314f8602556",
"name": "果干蜜饯",
"aaa": ["1"]
},
"86f6d05d71d5c126063f2b2e3ad2eba0": {
"id": "86f6d05d71d5c126063f2b2e3ad2eba0",
"name": "肉干肉脯",
"aaa": ["2"]
},
"29a5f4195ce5950a053e5513f26b3de5": {
"id": "29a5f4195ce5950a053e5513f26b3de5",
"name": "膨化食品",
"aaa": ["3"]
},
"6ac3faa1324946e8bf670c6bde4b7725": {
"id": "6ac3faa1324946e8bf670c6bde4b7725",
"name": "白酒"
},
"ff4b63978e4b1e76d131ce755b2c2fbe": {
"id": "ff4b63978e4b1e76d131ce755b2c2fbe",
"name": "其它酒水类"
}
},
"firstCategories": {
"434b927779aac23a2c1e1e3a82988ffb": {
"id": "434b927779aac23a2c1e1e3a82988ffb",
"name": "休闲零食",
"children": ["984c93f9be8e4aad35f70314f8602556", "86f6d05d71d5c126063f2b2e3ad2eba0", "29a5f4195ce5950a053e5513f26b3de5"]
},
"a0679cba84a70cb735373a128bfcf912": {
"id": "a0679cba84a70cb735373a128bfcf912",
"name": "酒",
"children": ["6ac3faa1324946e8bf670c6bde4b7725", "ff4b63978e4b1e76d131ce755b2c2fbe"]
}
},
"products": {
"062820bde7a686df1bbc61bcd0a67097": {
"id": "062820bde7a686df1bbc61bcd0a67097",
"eshop_id": "00000000000000000000000000005187",
"is_combo": "no",
"orders": 2,
"business_status": "open",
}
}
},
"result": {原数据}
}

官网案例


原创,转载请注明:http://www.cnblogs.com/chunlei36

normalizr实践使用(个人总结,仅供参考)的更多相关文章

  1. mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考

    数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点.   请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...

  2. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  3. Ubuntu 12.04 分区方案(仅供参考)

    Ubuntu 12.04 分区方案(仅供参考)   总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...

  4. VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)

    自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...

  5. jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]

    先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...

  6. 第二步 (仅供参考) sencha touch 使用cmd打包apk

    最新版本的cmd可以直接将sencha touch项目打包成本地应用,不过还有很多不足,本文仅供参考 通过sencha app build native命令可以直接将项目打包成本地应用,不过在命令运行 ...

  7. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)

    先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...

  8. 分享分享JavaScript100例-仅供参考

    最近一直在做项目,分享下以前收集的Javascript100例,仅供参考. http://files.cnblogs.com/52net/JavaScript100例.zip

  9. 如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)

    尊敬的客户,您好!     感谢广大客户对我司工作的信任和支持!      我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量 ...

随机推荐

  1. Python 文件解压缩

    shutil对压缩包的处理是通过调用zipFile和tarFile两个模块来进行的. import zipfile # zipfile压缩 z = zipfile.ZipFile('ss.zip', ...

  2. python学习笔记5--加密模块hashlib

    import hashlib # md5 ybm_pwd='yuanbapqingsdfs234FF234HF@F' # m = hashlib.md5() # bytes_ybq = ybm_pwd ...

  3. js拾遗: 函数字面量

    今天落叶同学发我一篇文章,我看到一个"新"名词 "函数字面量" (也可叫直接量),当时我就郁闷了,这是什么东西? 我怎么没听说过..回头翻了下权威指南,在第 4 ...

  4. iOS 根据生日得到生肖,星座,年龄的算法

    根据用户生日,得到相应的年龄,星座和生肖.有的项目中可能会用到,贴出来共享. 得到年龄,这个很简单了: - (void)getAgeWith:(NSDate*)birthday{ //日历 NSCal ...

  5. 第12月第26天 swift 下划线

    1. The _ is used to define that the parameter is not named If you have multiple _ it states that you ...

  6. 无锁并发框架Disruptor学习入门

    刚刚听说disruptor,大概理一下,只为方便自己理解,文末是一些自己认为比较好的博文,如果有需要的同学可以参考. 本文目标:快速了解Disruptor是什么,主要概念,怎么用 1.Disrupto ...

  7. linux 串口驱动(三) 【转】

    转自:http://blog.chinaunix.net/uid-27717694-id-3495825.html 三.串口的打开在用户空间执行open操作的时候,就会执行uart_ops->o ...

  8. linux磁盘空间查看inode

    服务器一般是要求长期连续运行的,自动执行任务生成的各种文件及日志,可能使空间占满,从而造成业务故障,所以要定时清理. 一般来说,Linux空间占满有如两种情况: 1.空间被占满了 用df -k 可以看 ...

  9. 深入了解mitmproxy(二)

    主题    修改request或者response内容 介绍   mitmdump无交互界面的命令,与python脚本对接,来源于mitmproxy支持inline script,这里的script指 ...

  10. Linux6.5 安装Python3.X(转载)

    1.获取Python 3.6.3 通过官网https://www.python.org/downloads/下载Python 3.4.3源码: 源码获取命令如下:wget https://www.py ...