import { normalize, Schema, arrayOf } from 'normalizr';
var ListA = [
{
id:1,
text: "text1",
comments : [
{
id: 232,
text: "asfasd"
},
{
id: 333,
text: "abcsss"
}
]
},
{id:2, text:"text2", comments:[]},
{id:3, text:"text3", comments:[]}
]
我正在尝试规范化这个简单的回复。我不确定我在做什么或者我没有理解normalizr文档有什么问题。
const post = new Schema('posts');
// const comment = new Schema('comments');
// const collection = new Schema('collections');
// post.define({
// comments : comment,
// collections : arrayOf(collection)
// });
ListA = normalize(ListA, {
posts: arrayOf(post)
});
console.log(ListA);
这只会对“result”对象产生相同的响应,而entity对象为空。有人可以帮帮我吗。首先,我试图将帖子正常化,之后就会发表评论。但是我还没有能够跨越第一步。
答案 0 :(得分:4)
使用normalizr
1)规范化简单对象
仅举例来说
import { Schema, arrayOf } from 'normalizr';
const postSchema = new Schema('posts');
// simple post object
var post = {
id:1,
title: "some title"
};
console.log(normalize(post, postSchema));
结果将是
{
"entities":{
"posts":{
"1":{
"id":1,
"title":"some title"
}
}
},
"result":1
}
2)规范化对象数组
import { Schema, arrayOf } from 'normalizr';
const postSchema = new Schema('posts');
// array of posts
var posts = [
{
id:1,
title: "foo"
},
{
id:2,
title: "far"
},
{
id:3,
title: "baz"
}
];
console.log(normalize(posts, arrayOf(postSchema)));
结果将是
{
"entities":{
"posts":{
"1":{
"id":1,
"title":"foo"
},
"2":{
"id":2,
"title":"far"
},
"3":{
"id":3,
"title":"baz"
}
}
},
"result":[
1,
2,
3
]
}
3)规范化复杂对象
const postSchema = new Schema('posts');
const authorSchema = new Schema('authors');
const commentSchema = new Schema('comments');
postSchema.define({
author: authorSchema,
comments: arrayOf(commentSchema)
});
// complex post object
var post = {
id:1,
title: "foo",
author: {
id: 201,
name: "Bar Baz"
},
comments: [
{
id: 1002,
body: "Some content"
},
{
id: 1003,
body: "Some content 1003"
},
{
id: 1004,
body: "Some content 1004"
}
]
};
console.log(normalize(post, postSchema));
结果将是
{
"entities":{
"posts":{
"1":{
"id":1,
"title":"foo",
"author":201,
"comments":[
1002,
1003,
1004
]
}
},
"authors":{
"201":{
"id":201,
"name":"Bar Baz"
}
},
"comments":{
"1002":{
"id":1002,
"body":"Some content"
},
"1003":{
"id":1003,
"body":"Some content 1003"
},
"1004":{
"id":1004,
"body":"Some content 1004"
}
}
},
"result":1
}
所以你可以试试
ListA = normalize(ListA, arrayOf(post));
而不是
ListA = normalize(ListA, {
posts: arrayOf(post)
});