首页 男生 其他 深入浅出React和Redux

4.5.1 Todo状态设计

深入浅出React和Redux 程墨 3620 2021-04-06 02:29

  您可以在百度里搜索“深入浅出React和Redux 艾草文学(www.321553.xyz)”查找最新章节!

  

  4.5.1 Todo状态设计

  至于Todo应用状态,从界面上看,应用中可以有很多待办事项,并有先后顺序的关系,明显用一个数组很合适。所以,我们的状态树上应该有一个表示待办事项的数组。

  至于每个待办事项,应该用一个对象代表,这个对象肯定要包含文字,记录待办事项的内容,因为我们可以把一个待办事项标记为“已完成”,所以还要有一个布尔字段记录是否完成的状态,当我们把一个待办事项标记为“已完成”或者“未完成”时,必须要能唯一确定一个待办事项对象,没有规则说一个待办事项的文字必须唯一,所以我们还需要一个字段来唯一标示一个待办事项,所以一个待办事项的对象格式是这样:

  {

  id: // 唯一标示

  text: // 待办事项内容

  completed: // 布尔值,标示待办事项是否已完成

  }

  过滤器选项设定界面上显示什么样状态的代表事项,我们已知过滤器有三种选择:

  ·全部待办事项;

  ·已完成代办事项;

  ·未完成待办事项。

  看起来就是一个列举类型的结构,不过JavaScript里面并没有原生的enum类型支持,所以我们只能用类似常量标示符的方式来定义三种状态。在代码中,可以分别用体现语义的ALL、COMPLETED和UNCOMPLETED代表这三种状态,但是这三个标示符的实际值的选择,也值得商榷。

  最简单的方式,就是让这三个状态标示符的值是是整形,比如这样的代码形式:

  const ALL=0;

  const COMPLETED=1;

  const UNCOMPLETED=2;

  但是,考虑到将来无论是debug还是产生log,一个数字在开发人员眼里不容易看出来代表什么意思,最后还需要对照代码才知道0代表ALL、1代表COMPLETED,这样很不方便。所以,开发中一个惯常的方法,就是把这些枚举型的常量定义为字符串,比如这样的代码:

  const ALL = 'all';

  const COMPLETED = 'completed';

  const UNCOMPLETED = 'uncompleted';

  综合起来看,我们知道Todo应用的Store状态树大概是这样一个样子,JavaScript对象的表示形式如下:

  {

  todos: [

  {

  text: 'First todo',

  completed: false,

  id: 0

  },

  {

  text: 'Second todo',

  completed: false,

  id: 1

  }

  ]

  filter: 'all'

  }

  每当增加一个待办事项,就在数组类型的todos中增加一个元素,当要标记一个待办事项为“已完成”或者“未完成”,就更新对应待办事项的complete字段值,而哪些待办事项应该显示出来,则要根据todos和filter共同决定。

  在应用的入口文件src/index.js中,我们和ControlPanel一样,用Provider包住最顶层的TodoApp模块,这样让store可以被所有组件访问到,代码如下:

  ReactDOM.render(

  

  ,

  document.getElementById('root')

  );

  而在顶层模块src/TodoApp.js中,所要做的只是把两个关键视图显示出来,代码如下:

  import React from 'react';

  import {view as Todos} from './todos/';

  import {view as Filter} from './filter/';

  function TodoApp() {

  return (

  

  

  );

  }

  export default TodoApp; 深入浅出React和Redux

目录
设置
手机
书架
书页
评论