Redux 基础学习

Redux 基础学习

参考:

http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html

什么是Redux:

Redux是一个适合用户使用方式复杂、多用户权限(用户和管理员),与服务器大量交互或者View要从多个数据源获取数据的框架。

它的设计思想:

1、web用用是一个状态机,视图与状态是意义对应的。

2、所有状态,保存在一个对象里面

基本api

Store

Store是保存数据的地方,可以将其看成一个容器。整个应用只能有一个Store

Redux 提供createStore这个函数,用来生成Store。

import { createStore } from 'redux';

const store = createStore(fn);

注意:fn:是另一个函数

state

Store对象包含所有数据。如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。

当前时刻的 State,可以通过store.getState()拿到。

import { createStore } from 'redux';

const store = createStore(fn);

const state = store.getState();

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

Action

Action 就是 View 发出的通知,表示State 应该要发生变化了。

Action 是一个对象。其中的type属性是必须的,表示Action 的名称。其他属性可以自由设置,不过还是需要定一个规范

const action = {

 type: 'ADD_TODO',

 payload: 'Learn Redux'

};

Action 描述当前发生的事情。改变 State 的唯一办法,就是使用Action。它会运送数据到 Store。

Action  Creator

View 要发送多少种消息,就会有多少种Action。如果都手写,会很麻烦。可以定义一个函数来生成 Action,这个函数就叫 Action Creator。

const ADD_TODO = '添加 TODO';

function addTodo(text) {

  return{

   type: ADD_TODO,

   text

  }

}

const action = addTodo('Learn Redux');

store.dispatch()

这是View 发出 Action 的唯一方法。

import { createStore } from 'redux';

const store = createStore(fn);

store.dispatch({

 type: 'ADD_TODO',

 payload: 'Learn Redux'

});

结合Action Creator就是

store.dispatch(addTodo('Learn Redux'));

Reducer

Store 收到 Action 以后,必须给出一个新的State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。

Reducer 是一个函数,它接受 Action 和当前 State 作为参数,返回一个新的State。

const reducer = function (state, action) {

  // ...

  returnnew_state;

};

在使用中store.dispatch方法会触发 Reducer 的自动执行。为此,Store 需要知道 Reducer 函数,做法就是在生成 Store 的时候,将 Reducer 传入createStore方法。

import { createStore } from 'redux';

const store = createStore(reducer);

以后每当store.dispatch发送过来一个新的 Action,就会自动调用 Reducer,得到新的 State

store.subscribe()

允许使用store.subscribe方法设置监听函数,一旦 State发生变化,就自动执行这个函数。

import { createStore } from 'redux';

const store = createStore(reducer);

store.subscribe(listener);

只要把 View 的更新函数(对于 React 项目,就是组件的render方法或setState方法)放入listen,就会实现 View 的自动渲染。

Store总结

Store提供三个方法:

l  store.getState()

l  store.dispatch()

l  store.subscribe()

工作原理

 

中间件

什么是中间件

在整个工作流程中,只有发送 Action 的这个步骤,即store.dispatch()方法,可以添加功能。

中间件就是一个函数,对store.dispatch方法进行了改造,在发出 Action 和执行 Reducer 这两步之间,添加了其他功能

let next = store.dispatch;

store.dispatch = functiondispatchAndLog(action) {

 console.log('dispatching', action);

 next(action);

 console.log('next state', store.getState());

}

对store.dispatch进行了重定义,在发送 Action 前后添加了打印功能

加载中间件

const logger = createLogger();

const store = createStore(

 reducer,

 initial_state,

 applyMiddleware(logger)

);

加载多个中间件

const store = createStore(

 reducer,

 applyMiddleware(thunk, promise, logger)

);

applyMiddleware方法的三个参数,就是三个中间件,有的中间件有次序要求!

applyMiddlewares()内部,所有中间件被放进了一个数组chain,然后嵌套执行,最后执行store.dispatch

异步

异步操作的整体思路:

操作开始时,送出一个 Action,触发 State 更新为"正在操作"状态,View 重新渲染

操作结束后,再送出一个 Action,触发 State 更新为"操作结束"状态,View 再一次重新渲染

这里我们用到的是redux-thunk中间件,通过它改造store.dispatch,使得后者可以接受函数作为参数

猜你喜欢

转载自blog.csdn.net/u011486491/article/details/79140150
今日推荐