什么是用于存储域数据的合适的reducer体系结构

时间:2018-07-28 16:46:27

标签: javascript reactjs redux architecture

我有一些域数据,例如描述课程的数据。

我们需要考虑:

  1. 分页和过滤是在服务器端实现的。

  2. 有不同类型的课程(您的课程,公共课程,封闭课程等)

  3. 课程描述的深度不同(一些常规描述,详细描述)

大约有五个不同的页面,它们使用相同的域数据(课程)。

  1. 主页:公共课程列表/概述。

  2. 包含所有课程列表的页面:公开课程列表/详细说明

  3. 您的个人资料页面:课程列表/一般描述

  4. 您当前的课程页面:您当前课程的列表/详细说明

  5. 您已完成的课程页面:已完成课程的列表/详细说明

  6. 您的成功:已完成课程的列表/详细说明/无需分页

我决定使用每页减速器架构:

{
    main: {
        courses: {
            filters: { ... },
            pagination: { ... },
            data: [
                {
                    <general>
                },
                ...
            ]
        }
    },
    listCourses: {
        courses: {
            filters: { ... },
            pagination: { ... },
            data: [
                {
                    <detailed>
                },
                ...
            ]
        }
    },
    profile: {
        main: {
            courses: {
                filters: { ... },
                pagination: { ... },
                data: [
                    {
                        <general>
                    },
                    ...
                ]
            }
        },
        current: {
            courses: {
                filters: { ... },
                pagination: { ... },
                data: [
                    {
                        <detailed>
                    },
                    ...
                ]
            }
        },
        completed: {
            courses: {
                filters: { ... },
                pagination: { ... },
                data: [
                    {
                        <detailed>
                    },
                    ...
                ]
            },
        }
        success: {
            courses: {
                pagination: { ... },
                data: [
                    {
                        <detailed>
                    },
                    ...
                ]
            }
        },  
    },
}

但是我的同事们说,每页减速器的体系结构很丑陋,我不应该使用它,尤其是因为the creator of Redux doesn't suppose这是一个好主意。

1 个答案:

答案 0 :(得分:0)

我建议您保持状态尽可能平坦,并使用reselect

https://redux.js.org/recipes/structuringreducers/normalizingstateshape