Redux 初识

69 阅读3分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战


1、Redux概述

1.1 什么是Redux

  • Redux 是一个用于JavaScript状态容器,提供可与预测化的状态管理
  • Redux可以让你构建一致化的应用,运行于不同的环境(客户端、服务器、原生应用),并且易于测试
  • Redux 除了和React 一起使用外,还支持其他界面库,而且体积较小(只有2KB)

1.2  redux的设计初衷

随着js单页面开发日趋复杂,js需要管理更多的state(状态),这些state可能包括服务器响应、缓存数据、本地生成未持久化到服务器的数据,也包括UI状态等

管理不断变化的state非常麻烦,如果一个model 的变化会引起另一个model 的变化,那么当view 变化时就可能引起对应的model 以及另一个model的变化,依次可能会引起另一个view的变化,所以就会产生混乱

而Redux就是为了去解决这个问题

1.3 Redux三大核心

1 单一数据源

整个应用的state被存储在一个object tree中,并且这个object tree只存在于唯一一个store 中

2 State是只读的(并不是说不能修改)

唯一改变state的方法就是触发action,action是一个用于描述已发生事件的普通对象

store.dispatch({type:'COMPLETE_TODO',index:1})

3 使用纯函数来执行修改

为了描述action如何改变state tree,你需要去编写reducers

Reducers只是一些纯函数(相同的输入会得到相同输出的函数), 它接收先前的state和action,并且返回新的state,

可以复用、可以控制顺序、传入附加参数

2、Redux的组成

2.1 State  状态

就是我们传递的数据,常用state分为  服务器端的数据、 UI展示的状态、 App级别的状态

2.2 Action  事件

Action 是把数据从应用传到stroe的载体,它是store数据的唯一来源,一般来说,我们可以通过store.dispatch() 将action传递给store

Action 的特点

  • Action的本质就是一个js的普通对象
  • Action对象内部必须要有一个type属性来表示要执行的动作(本次操作的类型,也是reducer条件判断的依据)
  • 多数情况下,这个type会被定义成字符串常量
  • 除了type字段之外,action的结构随意进行定义
  • 在项目中,更多的喜欢用action创建函数(就是创建action的地方)
  • 只是描述了有事情要发生,并没有描述如何去更新state

 2.3 Reducer

Reducer本质就是一个函数,他是用来响应发送过来的actions,然后经过处理,把state发送给Store的。

接收当前应用的state和触发的动作action,计算并返回最新的state。

注意:在Reducer函数中,需要return返回值,这样Store 才能接收到数据

// 举个栗子 计算器reducer,根据state(当前状态)和action(触发的动作加、减)参数,计算返回newState

function countReducer(state, action) {
    switch(action.type) {
    case 'add':
    return state + 1;
    case 'sub':
    return state - 1;
    default:
    return state;
    }
}

2.4 Stroe

Store就是把action与reducer联系到一起的对象

主要职责

  • 维持应用的state
  • 提供getState()方法获取state
  • 提供dispatch()方法发送action
  • 通过subscribe()来注册监听
  • 通过subscribe()返回值来注销监听