1

全部:

我对 redux reducer 很陌生,大多数答案都指向 normalizr.js。举个例子:

const blogPosts = [
    {
        id : "post1",
        author : {username : "user1", name : "User 1"},
        body : "......",
        comments : [
            {
                id : "comment1",
                author : {username : "user2", name : "User 2"},
                comment : ".....",
            },
            {
                id : "comment2",
                author : {username : "user3", name : "User 3"},
                comment : ".....",
            }
        ]    
    },
    {
        id : "post2",
        author : {username : "user2", name : "User 2"},
        body : "......",
        comments : [
            {
                id : "comment3",
                author : {username : "user3", name : "User 3"},
                comment : ".....",
            },
            {
                id : "comment4",
                author : {username : "user1", name : "User 1"},
                comment : ".....",
            },
            {
                id : "comment5",
                author : {username : "user3", name : "User 3"},
                comment : ".....",
            }
        ]    
    }
    // and repeat many times
]

我将架构定义如下:

var authorSchm = new schema.Entity("authors", {}, {idAttribute: "username"});
var commentSchm = new schema.Entity("comments", {author:authorSchm})
var commentList = [commentSchm];
var postSchm = new schema.Entity("posts", {author:authorSchm, comments:commentList});
var postList = [postSchm];


var normalizedData = normalize(blogPosts, postList);
console.log(JSON.stringify(normalizedData, null, 4));

我得到如下结果:

{
    "entities": {
        "authors": {
            "user1": {
                "username": "user1",
                "name": "User 1"
            },
            "user2": {
                "username": "user2",
                "name": "User 2"
            },
            "user3": {
                "username": "user3",
                "name": "User 3"
            }
        },
        "comments": {
            "comment1": {
                "id": "comment1",
                "author": "user2",
                "comment": "....."
            },
            "comment2": {
                "id": "comment2",
                "author": "user3",
                "comment": "....."
            },
            "comment3": {
                "id": "comment3",
                "author": "user3",
                "comment": "....."
            },
            "comment4": {
                "id": "comment4",
                "author": "user1",
                "comment": "....."
            },
            "comment5": {
                "id": "comment5",
                "author": "user3",
                "comment": "....."
            }
        },
        "posts": {
            "post1": {
                "id": "post1",
                "author": "user1",
                "body": "......",
                "comments": [
                    "comment1",
                    "comment2"
                ]
            },
            "post2": {
                "id": "post2",
                "author": "user2",
                "body": "......",
                "comments": [
                    "comment3",
                    "comment4",
                    "comment5"
                ]
            }
        }
    },
    "result": [
        "post1",
        "post2"
    ]
}

我想知道如何在 Redux reducer 和 combineReducers 中使用这些标准化数据?我怎么知道我应该去哪个实体根据引用字符串获取下一级数据(例如:当我得到“post1”时,我怎么知道我应该去post实体获取post1对象和post1对象内部,如何为那些comment1,comment2 .. 做到这一点

4

1 回答 1

0

对此的任何答案都将在很大程度上是主观的,并且取决于您的特定应用程序和用例。有关通用且推荐的方法,请查看官方示例。这是combineReducers的样子。

于 2017-03-23T23:43:01.433 回答