Redux学习

Redux是 状态管理器,由Flux演变而来

应用中所有的 state 都以一个对象树的形式储存在一个单一的 store 中。 惟一改变 state 的办法是触发 action,一个描述发生什么的对象。 为了描述 action 如何改变 state 树,你需要编写 reducers

import { createStore } from 'redux'
// 编写一个reducer
function counter(state=0,action) {
  switch(action.type){
   case 'INCREMENT':
     return state + 1;
   case 'DECREMENT':
     return state - 1;
    default: 
     return state;
  }
}

// 创建 Redux store 来存放应用的状态
// API 是  { subscribe,dispatch, getState }
let store = createStore(counter)
// 可以手动订阅更新,也可以事件绑定到视图层
store.subscribe( ()=>console.log(store.getState()) )

// 改变内部state唯一方法是 dispatch一个action
store.dispatch({type: 'INCREMENT'}) 
三大原则
  • 单一数据源
    唯一的store
  • state是只读的
    唯一改变state的方式是触发action, 不能只修修改state
  • 使用纯函数来执行修改
    Reducer是纯函数,接收先前的state和action,并返回一个新的state
基础
Action

定义用户交互的行为

const ADD_TODO = 'ADD_TODO'
const action = {
  type: ADD_TODO,
  text:'sdfjkwope'
}

Action 创建函数
Action 创建函数生成action的方法

function addTodo(text){
    return {
      type: ADD_TODO,
      text
  }
}
store.dispatch(action) // 触发action 
Reducer

纯函数,响应action,并更新state
不要做这些

  • 修改传入的参数,不能修改state
  • 执行有副作用的操作,如API请求和路由跳转
  • 调用非纯函数,如Data.now(),Math.random()
    拆分/组合Reducer
    combineReducers()
import { combineReducers } from 'redux'
// 合并 visibilityFilter,todos两个reducer
const todoApp = combineReducers({
  visibilityFilter,
  todos
})
Store

Store是单一的,职责:

  • 维持应用的state
  • 提供 getState() 方法获取state
  • 提供 dispatch(action)方法更新state
  • 通过 subscribe(listener)注册监听器
  • 通过 subscribe(listener)返回的函数注销监听器

创建store

import { createStore } from 'redux'
import todoApp from  './reducers'
let store = createStore(todoApp)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • 很多老板最怕遇到的就是执行力不高的员工,有很紧急的工作任务,要是遇到执行力差的员工,很可能就误事了。那么今天企业咨...
    Eggyino阅读 325评论 0 0
  • Zen先生阅读 152评论 0 0
  • 尔今访山可有道, 缘木求鱼还成空。 劝君莫效禅戒律, 逍遥法外理自生。
    酒馆守夜人阅读 100评论 0 0
  • 高跟鞋对于女人来说如同爱情一般,可以让她们高贵典雅,也可以让她们瞬间撒泼。 星期二的早晨,我踩着一双新买的B...
    步青云1号阅读 444评论 0 0
  • 作品原文 羔裘逍遥,狐裘以朝。岂不尔思?劳心忉忉。 羔裘翱翔,狐裘在堂。岂不尔思?我心忧伤。 羔裘如膏,日出有曜。...
    至简从心阅读 716评论 37 63