使用react-redux 实现todolist记录

2017-09-17  本文已影响241人  放风筝的小小马

注意:扩展 指的是实现一个类似于 奇妙清单 的todos的思考

先设计Redux 的 state

根据应用的功能来设计state的数据存储结构
对于一个todos,有两个数据需要存储:

  1. 过滤器(就是当前选择显示的todos),如:显示所有的todos、显示未完成的todos或者显示完成的todos
  2. todos的信息
- text
- completed
- deleted

Redux state的数据结构就是:

{
  visibilityFilter: 'SHOW_ALL',
  todos: [
    {
      text: 'Consider using Redux',
      completed: true,
    },
    {
      text: 'Keep all state in a single tree',
      completed: false
    }
  ]
}

扩展

  1. 过滤器
  2. todos的信息
- text:todo的信息
- folder:该todo所属folder
- completed:完成状态
- deleted:删除状态
- createTime:创建时间
- finishedTime::完成时间

设计component层级(Hierarchy)

Think in React

设计一个web app 的流程

第一步:将UI解剖到 Component Hierarchy中

在这个过程中,应该如何将UI解剖成单个的组件呢?或者说我们如何确定这一部分可以作为一个组件存在?
遵循一个原则:单一职责原则,也就是说一个组件只做一件事
一般来说,如果数据模型合理,那么就很好将数据模型映射到UI组件上,因为UI和数据模型一般都是遵循相同的架构,所以,只需要将数据模型分解为代表UI的各个组件即可

将UI拆分为各个组件之后,要画出组件层级图,表明各组件的层级关系,也就是它们之间是如何进行嵌套的

第二步:Build A Static Version in React

就是将第一步划分的component,按照Component 层级关系拼接成一个没有交互的版本;
注意:不要使用state来构建该版本,state仅仅是为了交互而存在的

构建该版本有两种方式:

数据从最顶层的component与data model进行通信,然后通过props向下面的子组件传递数据
React遵循单向数据流

最顶层的组件一般都是Container component,而它下面的子组件很大一部分都是Presentation component。

第三步:构建能够反映UI状态的最小数据模型(state)

其实就是设计数据存储框架,也就是model的架构

在React中有两种数据模型(model):propsstate

这时,我们要判断出我们的应用程序中,哪些是state,哪些是props?
首先,列出我们的应用程序所有的数据
然后依照下面的规则来判断哪些数据是state,规则如下:

第四步:标识出state应该传递给哪些组件

对于新手,这一步往往会很困惑,可以遵循下面的几条规则:

第五步:增加逆向数据流

因为子组件不能直接更改父组件传递下来的数据,所以,需要为子组件的行为绑定事件处理程序,该处理程序通过父组件传递下去

参考:https://facebook.github.io/react/docs/thinking-in-react.html

使用Redux 和 React

在上面的构建出了最小数据模型之后要开始设计Redux的actions和reducer

接上面的第三步之后,设置actions

设计reducer

上一篇下一篇

猜你喜欢

热点阅读