Redux:store
2024-08-31 21:02:15
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()的函数。
最新文章
- 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍
- js_继承
- python之模块
- SOLID rule in JAVA design.
- Oracle创建表空间、创建用户以及授权、查看权限
- Java多线程系列--“JUC线程池”01之 线程池架构
- two sample ttest &; paired ttst
- Android -- 闹钟服务的使用(单次闹钟)
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
- .NET中变量的类型问题
- css3动画属性中的transition属性
- PDF在线预览
- jquery怎么在点击li标签之后添加一个在class,点击下一个li时删除上一个class?
- ASP.NET Web API的消息处理管道: HttpRoutingDispatcher
- URL与String转换
- 聊聊JavaScript-闭包
- java文件过滤器的使用
- 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片
- Tell Me About Yourself - Best Answers and Examples
- try语句的使用
热门文章
- 0day学习笔记(3)Windows定位API引起的惨案(原理)
- redis部署与卸载
- webpack插件解析:HtmlWebpackPlugin是干什么的以及如何使用它
- layui模块化加载Echarts图表v4.2.1
- PostgreSQL 10.0 preview 性能增强 - 分区表性能增强(plan阶段加速)
- 在独立的 Root 和 Home 硬盘驱动器上安装 Ubuntu
- CodeForces - 1102B Array K-Coloring
- 数学--数论--中国剩余定理 拓展 HDU 1788
- 获取Wi-Fi的SSID
- 1-MyBatisPlus教程(一)