当前位置:嗨网首页>书籍在线阅读

03-状态的结构与初始状态

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.1.1 状态的结构与初始状态

reducer即将开始处理单个Redux store的修改,因此是时候讨论一下采用什么结构的store。设计任何应用程序的状态结构即会影响应用UI的工作方式,也会受应用UI工作方式的影响,但是通常最好将“原始”数据与UI数据尽可能地分离。一种方式是将诸如ID之类的数据与其对应的数据分开存储,并使用ID来查询数据。

我们将创建一个初始状态文件来帮助确定状态的形式和结构。在constants目录中,创建一个名为initialState.js的文件。这将是任何action被派发或任何更改发生之前Redux应用的状态。这个状态文件将包含有关错误和“加载中”状态的信息,以及关于帖子、评论和用户的一些信息。我们将在数组中存储评论和帖子的ID,并将这些ID对应的主要信息存储在可以轻松引用的对象中。代码清单11-1展示了设置初始状态的示例。

代码清单11-1 初始状态以及状态结构(src/constants/initialState.js)

export default {  ⇽--- Redux用作其初始状态的对象
    error: null,
    loading: false,
    postIds: [],  ⇽--- 将评论ID和帖子ID与实际数据分开存储
    posts: {},
    commentIds: [],
    comments: {},
    pagination: {
        first: `${process.env  ⇽--- 存储分页链接(通过HTTP头接收)——这只是众多分页实现方式的一种
            .ENDPOINT}/posts?_page=1&_sort=date&_order=DESC&
    _embed=comments&_expand=user&_embed=likes`,  ⇽--- 存储分页链接(通过HTTP头接收)——这只是众多分页实现方式的一种
        next: null,
        prev: null,
        last: null
    },
    user: {  ⇽--- 存储用户身份验证状态信息
        authenticated: false,
        profilePicture: null,
        id: null,
        name: null,
        token: null
    }
};