Store是一个对象。他有如下职责:

1.存放state

2.对外提供访问state的接口: getState()

3.允许state更新:dispatch(action)

4.注册监听器: subscribe(listener)

5.注销监听器,通过subscribe返回的函数

redux所在的应用只能有一个store实例,如果想将state操作分解成多个逻辑,只能将Reducer的代码分解为多个部分,以函数调用的方式提取出来处理各自的逻辑。

当我们已经有一个处理state的Reducer函数时,比如todoApp,创建store实例非常简单,只需将它传入createStore():

 import { createStore } from 'redux'
import todoApp from './reducers'
let store = createStore(todoApp)

createStore()可以接收第二个参数,作为state的初始值。文档中提到的一种情况是传入服务器返回的state作为初始state,实现定制化。

Dispatching Actions:

 //action creators
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
let 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()

一开始我以为store是一个独立且区别于reducer的对象,现在发现,原来createStore只是对Reducer做了一层包装。

当store.dispatch()方法被调用的时候,只需要传入action,其内部会自动获取即刻的state并一起传入Reducer中。

值得一提的是,subscribe()方法默认订阅的是state发生变化这个事件,和所有基于事件机制的方法一样,传入的是一个callback。其返回值默认是一个注销subscribe()的函数。

最新文章

  1. 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍
  2. js_继承
  3. python之模块
  4. SOLID rule in JAVA design.
  5. Oracle创建表空间、创建用户以及授权、查看权限
  6. Java多线程系列--“JUC线程池”01之 线程池架构
  7. two sample ttest & paired ttst
  8. Android -- 闹钟服务的使用(单次闹钟)
  9. Java眼中的XML--文件读取--1 应用DOM方式解析XML
  10. .NET中变量的类型问题
  11. css3动画属性中的transition属性
  12. PDF在线预览
  13. jquery怎么在点击li标签之后添加一个在class,点击下一个li时删除上一个class?
  14. ASP.NET Web API的消息处理管道: HttpRoutingDispatcher
  15. URL与String转换
  16. 聊聊JavaScript-闭包
  17. java文件过滤器的使用
  18. 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片
  19. Tell Me About Yourself - Best Answers and Examples
  20. try语句的使用

热门文章

  1. 0day学习笔记(3)Windows定位API引起的惨案(原理)
  2. redis部署与卸载
  3. webpack插件解析:HtmlWebpackPlugin是干什么的以及如何使用它
  4. layui模块化加载Echarts图表v4.2.1
  5. PostgreSQL 10.0 preview 性能增强 - 分区表性能增强(plan阶段加速)
  6. 在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu
  7. CodeForces - 1102B Array K-Coloring
  8. 数学--数论--中国剩余定理 拓展 HDU 1788
  9. 获取Wi-Fi的SSID
  10. 1-MyBatisPlus教程(一)