normalizr实践使用(个人总结,仅供参考)
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实践使用(个人总结,仅供参考)的更多相关文章
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...
- Unity上一页下一页切换功能实现源码(仅供参考)
在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...
- Ubuntu 12.04 分区方案(仅供参考)
Ubuntu 12.04 分区方案(仅供参考) 总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...
- VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)
自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...
- jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]
先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...
- 第二步 (仅供参考) sencha touch 使用cmd打包apk
最新版本的cmd可以直接将sencha touch项目打包成本地应用,不过还有很多不足,本文仅供参考 通过sencha app build native命令可以直接将项目打包成本地应用,不过在命令运行 ...
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...
- 分享分享JavaScript100例-仅供参考
最近一直在做项目,分享下以前收集的Javascript100例,仅供参考. http://files.cnblogs.com/52net/JavaScript100例.zip
- 如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)
尊敬的客户,您好! 感谢广大客户对我司工作的信任和支持! 我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量 ...
随机推荐
- JavaScript--Dom间接选择器
一.Dom间接选择器 间接查找的属性 parentNode // 父节点 childNodes // 所有子节点 firstChild // 第一个子节点 lastChild // 最后一个子节点 n ...
- (转)Python中的模块循环导入问题
本文转自: https://wiki.woodpecker.org.cn/moin/MiscItems/2008-11-25 问题 cleven <shenglipang@gmail.com&g ...
- javaweb购物车实现的几种方式
之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3 ...
- docker 原理
docker项目的目标是实现轻量级的操作系统虚拟化,Docker的基础是Linux容器(LXC)等技术. 在LXC的基础上,Docker做了进一步的封装,让用户不关心容器的管理,使得操作更为简单.用户 ...
- centos内存自动清理脚本及限制tomcat内存占用
使用crontab定时每天自动清理系统内存 00 00 * * * /root/Cached.sh [root@localhost ~]# cat Cachec.sh #! /bin/bash# ca ...
- webstorm去掉vue错误提示
- MongoDB探索之路(三)——索引
1.索引介绍 2.创建语句 1)基础索引 在字段age 上创建索引,1(升序);-1(降序):db.users.ensureIndex({age:1}) _id 是创建表的时候自动创建的索引,此索引是 ...
- [python]python三元表达式另类实现方式
() variable = a if exper else b ()variable = (exper and [b] or [c])[] () variable = exper and b or c
- 用MFC(C++)实现拼音搜索
2015年4月1日更新: 我在github开源了Objective-C版的拼音搜索项目,感兴趣的可以去看看: OC版拼音搜索 最近项目需要实现按照拼音搜索资源.在网上找了一下,这方面的东西太少了. J ...
- 记webpack下引入vue的方法(非.vue文件方式)
直接script引入下载静态的vue.js文件则最后用copy-webpack-plugin复制到一样的目录即可 使用npm安装的vue无法直接用 import vue from "vue& ...