action types
 
export const ADD_TODO = 'ADD_TODO'
export const TOGGLE_TODO = 'TOGGLE_TODO'
export const SET_VISIBILITY_FILTER = 'SET_VISIBILITY_FILTER'
 
other constants
 
export const VisibilityFilters = {
SHOW_ALL: 'SHOW_ALL',
SHOW_COMPLETED: 'SHOW_COMPLETED',
SHOW_ACTIVE: 'SHOW_ACTIVE'
}
 
action creators
export function addTodo(text) {
return { type: ADD_TODO, text }
}
export function toggleTodo(index) {
return { type: TOGGLE_TODO, index }
}
export function setVisibilityFilter(filter) {
return { type: SET_VISIBILITY_FILTER, filter }
}

reducers

import { combineReducers } from 'redux'
import {
ADD_TODO,
TOGGLE_TODO,
SET_VISIBILITY_FILTER,
VisibilityFilters
} from './actions'
const { SHOW_ALL } = VisibilityFilters
 
function visibilityFilter(state = SHOW_ALL, action) {
switch (action.type) {
case SET_VISIBILITY_FILTER:
return action.filter
default:
return state
}
}
 
 
function todos(state = [], action) {
switch (action.type) {
case ADD_TODO:
return [
...state,
{
text: action.text,
completed: false
}
]
case TOGGLE_TODO:
return state.map((todo, index) => {
if (index === action.index) {
return Object.assign({}, todo, {
completed: !todo.completed
})
}
return todo
})
default:
return state
}
}
const todoApp = combineReducers({
visibilityFilter,
todos
})
export default todoApp
 
 
import {
addTodo,
toggleTodo,
setVisibilityFilter,
VisibilityFilters
} from './actions'
// Log the initial state
console.log(store.getState())
// Every time the state changes, log it
// Note that subscribe() returns a function for unregistering the listener
const unsubscribe = store.subscribe(() =>
console.log(store.getState())
)
// Dispatch some actions
store.dispatch(addTodo('Learn about actions'))
store.dispatch(addTodo('Learn about reducers'))
store.dispatch(addTodo('Learn about store'))
store.dispatch(toggleTodo(0))
store.dispatch(toggleTodo(1))
store.dispatch(setVisibilityFilter(VisibilityFilters.SHOW_COMPLETED))
// Stop listening to state updates
unsubscribe()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. RequireJs调研
  2. AngularJs $q promise
  3. 【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题
  4. JS 鼠标滚轮事件(mousewheel/DOMMouseScroll)
  5. k8s DNS 服务发现的一个坑
  6. Windows下安装 使用coreseek
  7. C语言中的内存分配与释放
  8. 如何安装ESXi的补丁
  9. 【转】并查集&MST题集
  10. jsp网站与discuz论坛用户同步
  11. 剑指offer-面试题15.链表中倒数第k个结点
  12. (译)linux系统关于命令echo的15个例子
  13. CImage类的介绍与使用
  14. HDU5058
  15. 基于规则评分的密码强度检测算法分析及实现(JavaScript)
  16. 【JavaScript动画基础】学习笔记(一)-- 旋转箭头
  17. 一丶HTML介绍
  18. python jieba库的基本使用
  19. Js/Bind()的认识
  20. python --第三方登录--微博

热门文章

  1. java 上传文件到FTP(centos中的ftp服务)
  2. c# AES128 加解密算法
  3. centos7:storm集群环境搭建
  4. 同时安装 Python2 & Python3 cmd下版本自由选择
  5. pycharm运行测试用例遇到错误:ZeroDivisionError: float division by zero的原因
  6. ionic3构建过程中遇到的找不到AndroidManifest.xml的问题
  7. 函数参数中经常见到的*args和**kwargs
  8. 【Python】关于近期爬虫学习的总结
  9. 20191127 Spring Boot官方文档学习(4.14-4.17)
  10. Python解释器判断整数相加溢出