Redux入门教程

Redux核心概念

EGH_Redux-New-cover.png

设计思想

(1) Web 应用是一个状态机,视图与状态是一一对应的
(2) 所有的状态都保存在一个对象里面(store)

设计原则

Dan Abramov 在推特上多次强调,Redux 的设计是以几个原则为优先的:

要让状态的变化可追踪,可重复,可维护。

Redux 认为,一个应用程序中,所有应用模块之间需要共享访问的数据,都应该放在 State 对象中。

基本概念

1、Store:

保存数据的地方、像一个仓库、保存着需使用的数据
redux提供createStore生成store

import { createStore } from 'redux';
const store = createStore(fn);

2、State:

组件状态数据
redux提供store.getState()获得

import { createStore } from 'redux';
const store = createStore(fn);
const state = store.getState();

Redux 规定, 一个 State 对应一个 View。只要 State 相同,View 就相同。你知道 State,就知道 View 是什么样,反之亦然。

3、Action:

State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。

Action 是一个对象。

const action = { 
    type: 'action_name',     // 必须的,action的名称
    payload: 'somedata'    //携带的信息
};

4、Reducer

store收到action后,给出一个新的state,然后View才会发生变化。 State 的计算过程就叫做 Reducer。

Reducer 是一个函数

const reducer = function (state, action) {     // 接受俩参数当前State和Action
     // ... 
    return new_state;    // 返回新的state
};

实际例子:

const defaultState = 0;
const reducer = (state = defaultState, action) => { 
    switch (action.type) { 
        case 'ADD': 
            return state + action.payload; 
        default: return state; 
    }
};
const state = reducer(1, { type: 'ADD', payload: 2});  // 实际应用中无需这样手动调用,store.dispatch
方法会触发 Reducer 的自动执行

上面代码中,reducer函数收到名为ADD的 Action 以后,就返回一个新的 State,作为加法的计算结果。

实际应用中,Reducer 函数不用像上面这样手动调用,store.dispatch方法会触发 Reducer 的自动执行。
因此Store 需要知道 Reducer 函数,做法就是在生成 Store 的时候,将 Reducer 传入createStore
方法。

import { createStore } from 'redux';
const store = createStore(reducer);  

上面代码中,createStore接收Reducer作为参数,生成新的store。
之后每当store.dispatch发送一个新的Action就会自动调用Reducer,得到新的State。

5、Reducer 的拆分

使用combineReducers()

import { combineReducers } from 'redux';
import PostsReducer from './reducer_posts';
import { reducer as formReducer } from 'redux-form';
const rootReducer = combineReducers({    
    posts: PostsReducer,  
    form: formReducer
});
export default rootReducer;

React-Redux流程

首先,用户发出Action

store.dispatch(action);

然后,Store调用Reducer,传入两个参数:当前 State 和收到的 Action。 Reducer 会返回新的 State 。

State 一旦有变化,Store 就会调用监听函数。

// 设置监听函数store.subscribe(listener);

listener
可以通过store.getState()
得到当前状态。如果使用的是 React,这时可以触发重新渲染 View。

function listerner() { 
    let newState = store.getState(); 
    component.setState(newState); 
}

讲了这么多、估计到了实际项目就又不知道什么是什么了,于是画了下面的图、希望能看懂 - -


1.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天说一下最近用到的Redux,以前看过的很好的文章,我加以引用和自己的理解。 React 只是 DOM 的一个抽...
    zyl_细嗅蔷薇阅读 2,828评论 0 0
  • Redux由Flux演变而来,提供几个简单的API来实现状态管理,所谓状态指的是应用数据,所以,Redux本质上是...
    齐修_qixiuss阅读 10,917评论 2 19
  • 学习必备要点: 首先弄明白,Redux在使用React开发应用时,起到什么作用——状态集中管理 弄清楚Redux是...
    贺贺v5阅读 12,891评论 10 58
  • http://gaearon.github.io/redux/index.html ,文档在 http://rac...
    jacobbubu阅读 80,268评论 35 198
  • 一、什么情况需要redux? 1、用户的使用方式复杂 2、不同身份的用户有不同的使用方式(比如普通用户和管...
    初晨的笔记阅读 6,225评论 0 11