react-redux--redux浅识

react-redux--redux浅识

看完reudx官网文章之后,有一种“憋闷”的感觉,这种感觉来自“我已经反复阅读了相关文档,但是实践到具体项目的时候,还是不会”,本系列文章旨在扫除这种障碍,能够让你简单上手使用。
在这里,我们假设你已经有丰富的react开发经验。如果没有,建议先阅读官方文档 react documentation

下面进入正题

reudx 是什么?

  • 一种架构模式;
  • 一个可预测化状态管理容器;

(说完跟没有说似得,一步一步来)

redux 有哪些东西?

  • action
  • reducer
  • store

(上面只是简单概括,咱们先入门,再深究)

action 是什么?

一个普通的javascript对象,定义state的操作类型和值。

{
  type: ‘描述操作的类型,其实就是简单描述这个state是干什么的,约定是大写的字符串常量,必须存在’,
  value1:’任意值,根据需求,可以定义多个’,
  value2:’任意值,根据需求,可以定义多个’,
}

(看,没有任何复杂的东西,请务必记住action的结构,一般通过action创建函数来创建action,具体后面会聊)

reducer 是什么?

一个纯函数,接收旧的 state 和 action,返回新的 state。

(previousState, action) => newState

previousState:旧的state
action:上面定义的action
newState:新的state

注意:
官方文档特别强调,要保持 reducer 纯净。永远不要在 reducer 里做这些操作:

  • 修改传入参数;
  • 执行有副作用的操作,如 API 请求和路由跳转;
  • 调用非纯函数,如 Date.now() 或 Math.random()。

总之,只要传入参数相同,返回计算得到的下一个 state 就一定相同。没有特殊情况、没有副作用,没有 API 请求、没有变量修改,单纯执行计算。

function todoApp(state, action) {
  switch (action.type) {
    case ‘ADD_TODO':
      return Object.assign({}, state, {  //不要修改 state。 使用 Object.assign() 新建了一个副本
        text: action.text
      })
    default:
      return state //在 default 情况下返回旧的 state。遇到未知的 action 时,一定要返回旧的 state。
  }
}

store 是什么?

它由Redux提供的 createStore(reducer, defaultState?) 方法生成,拥有以下方法

getState() 获取全局 state,类似一个类中的get方法
dispatch(action) 更新指定的 state,当执行该方法时候,redux会自动调用
reducer函数,这是唯一能改变store中数据的方式,
subscribe(listener) 注册监听器,store发生变化的时候被调用
subscribe(listener) 返回的函数注销监听器

到这里,我们知道:

store集中存储了应用中所有的state(一个大大的对象树),这些state的修改的快照,通
过有规范的action对象来描述。然后编写专门的函数来决定每个 action 如何改变应用的 state,这个函数被叫做 reducer。

如何让action ,reducer,store“三驾车”启动起来

直接上图

01.jpg

当调用store.dispath(action)方法时,redux会主动触发对应的reducer执行,从而得到新的state,state发生变化,store.subscribe()又会被调用,于是我们可以在这个方法中做UI重绘,或者通过store.getState()获取全新的state,以便后续使用。
就是这样!

结合官网的例子

import { createStore } from 'redux';

/**
 * 这是一个 reducer,形式为 (state, action) => state 的纯函数。
 * 描述了 action 如何把 state 转变成一个新的 state。
 *
 * state 的形式取决于你,可以是基本类型、数组、对象、惟一的要点是
 * 当 state 变化时需要返回全新的对象,而不是修改传入的参数。
 *
 * 下面例子使用 `switch` 语句和字符串来做判断,但你可以写帮助类(helper)
 * 根据不同的约定(如方法映射)来判断,只要适用你的项目即可。
 */
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,这里自动调用reducer函数
store.dispatch({ type: 'INCREMENT' });
// 1
store.dispatch({ type: 'INCREMENT' });
// 2
store.dispatch({ type: 'DECREMENT' });
// 1

怎么样,到这里是不是对redux的使用有了基本的了解,那么下面看看它是怎么和react默契配合,相得益彰的吧

下一章 react-redux--搭配react

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

推荐阅读更多精彩内容