Redux

207 阅读2分钟

一、Flux

Redux是Flux思想的另一种实现方式,通过了解Flux,可以知道Flux一族框架贯彻的最重要观点是单向数据流。 Flux认为MVC框架存在很大问题,它推翻了MVC框架,并用一个新的思维来管理数据流转。

二、Redux

Flux的基本原则是单向数据流,Redux在此基础上强调三个基本原则:

  • 唯一数据源;
  • 保持状态只读;
  • 数据改变只能通过纯函数完成。

(1)唯一数据源

唯一数据源指的是应用的状态数据应该只存储在唯一的一个Store上。 这个唯一Store上的状态,是一个树形的对象,每个组件往往只是用树形对象上一部分的数据。

(2)保持状态只读

保持状态只读,就是说不能去直接修改状态,要修改Store的状态,必须通过派发一个action对象完成。

(3)数据改变只能通过纯函数完成

所说的纯函数就是Reducer,redux这个名字的前三个字母Red代表的就是Reducer。Redux名字的含义是Reducer+Flux。

在Redux中,每个reducer的函数签名如下:

reducer(state,action);

第一个参数state是当前的状态,第二个参数action是接收到的action对象。reducer就是根据state和action的值产生一个新的对象返回。reducer必须是纯函数,函数的返回结果必须是完全由参数state和action决定,而且不产生任何副作用,也不能修改参数state和action对象。

action

action: 是行为的抽象; 是普通js对象; 一般由方法生成; 必须有一个type;

示例:

const addTodo = (text) => {
    return {
        type: 'ADD_TODO',
        id: nextTodoId++,
        text
    }
}

reducer

reducer: 是响应的抽象 是纯方法 传入旧状态和action 返回新状态

示例:

const todo = (state, action) => {
    switch (action.type) {
        case 'ADD_TODO':
            return {
                id: action.id,
                text: action.text,
                completed: false
            }
        case 'TOGGLE_TODO':
            if (state.id !== action.id) {
                return state;
            }
            return Object.assign({}, state, {
                completed: !state.completed
            })
        default:
            return state;
    }
}

store

action作用于store; reducer根据store响应; store是唯一的; store包括了完整的state; state完全可预测;

示例:

import {createStore}  from 'redux';
import todoApp from './reducers';

let store=createStore(todoApp);