首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Redux 实现时间旅行-4

使用 Redux 实现时间旅行-4

更高级的缩减程序在  中,您了解了如何组合使用缩减程序与 Redux combineReducers() 函数。图书搜索应用程序的最终版本组合了 4        个缩减程序,如清单 9 所示。
清单 9. 组合后的缩减程序 (reducers.js)        
1
2
3
4
5
6
7
8
// Combine reducers

export default combineReducers({
    books:         fetchReducer,
    topic:         topicReducer,
    currentStatus: statusReducer,
    displayMode:   bookDisplayReducer
});




清单 10 给出了在包含时间旅行功能后,图书搜索应用程序的经过改良的缩减程序。
清单 10. 更高级的 undo          缩减程序        (reducers.js)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { combineReducers } from 'redux';
import { store } from './store';
import stateHistory from './statehistory';

...

const undo = reducer => (state = stateHistory.present, action) => {
  switch(action.type) {
    case 'UNDO':
      stateHistory.undo();
      break;

    case 'REDO':
      stateHistory.redo();
      break;

    case 'GOTO':
      stateHistory.gotoState(action.stateIndex);
      break;

    default:
      const newState = reducer(state, action);
      stateHistory.push(newState);
  }

  return stateHistory.present;
}

// Combine reducers

export default undo(combineReducers({
    books:         fetchReducer,
    topic:         topicReducer,
    currentStatus: statusReducer,
    displayMode:   bookDisplayReducer
}));




在清单 10 中,undo() 函数是一个接受另一个缩减程序作为参数的缩减程序。当前操作与历史无关时,即操作类型不是          UNDO、REDO 或 GOTO 时,undo          函数会使用该缩减程序计算下一个状态。在这种情况下,在包含的缩减程序计算出该状态后,undo 函数会该状态推送到历史堆栈上。
当操作与历史相关时,undo 函数被委托给合适的状态历史方法。无论当前操作是否与历史相关,undo() 函数都会返回          stateHistory 对象当前定义的现在状态。
使用另一个缩减程序来确定下一个状态的缩减程序(比如 undo 函数)被称为高级 缩减程序,您可将它们视为  的等效函数。
结束语获取源代码
可从 GitHub 上的           获取该应用程序的完整源代码。

在本文中,您了解了如何实现时间旅行。尽管可能没有实时时间旅行那么刺激,但能够轻松实现代码来使您能在应用程序的以前状态中前后移动也很不错。此特性更像是开发人员的一种福利,而不是用户,因为它使开发时间旅行调试器成为可能。
在中,我将完成图书搜索应用程序的实现,并介绍        Redux 开发人员工具。您还将学习如何结合使用 Redux 和其他框架,比如 Angular。
返回列表