要素:store、reducer、dispatch/subscribe

connect:将业务逻辑剥离到容器类,数据的双向绑定;

数据、操作、UI分离、命令封装

核心思想:对共享状态的维护;

核心代码:

store={createStore(reducer)

const reducer = (state = 'GO', action) => {

switch(action.type) {

case 'GO':

state = 'GO'

break;

}

this.props.store.subscribe(() => {

this.forceUpdate();

});

<button onClick={() => {this.props.store.dispatch(goAction)}}

与flux的比较:

将状态修改的功能进行了剥离;

'use strict';

import React from 'react';

import ReactDOM from 'react-dom';

import Redux, { createStore } from 'redux';

import { reducer } from './reducer';

import { App } from './app';

ReactDOM.render(<App store={createStore(reducer)}/>,

document.getElementById('root'))

'use strict';

import React, { Component } from 'react';

const stopColor = (store) => {

return store.getState() == 'STOP' ? 'red' : 'white';

}

const cautionColor = (store) => {

return store.getState() == 'CAUTION' ? 'yellow' : 'white';

}

const goColor = (store) => {

return store.getState() == 'GO' ? 'rgb(39,232,51)' : 'white';

}

export class Stoplight extends Component {

componentWillMount() {

this.props.store.subscribe(() => {

this.forceUpdate();

});

}

render() {

return(

<div style={{textAlign: 'center'}}>

<svg height='170'>

<circle cx='145' cy='60' r='15'

fill={stopColor(this.props.store)}

stroke='black'/>

<circle cx='145' cy='100' r='15'

fill={cautionColor(this.props.store)}

stroke='black'/>

<circle cx='145' cy='140' r='15'

fill={goColor(this.props.store)}

stroke='black'/>

</svg>

</div>

)

}

}

'use strict';

import React, { Component } from 'react';

import { goAction, cautionAction, stopAction } from './actions';

export class Buttons extends Component {

componentWillMount() {

this.props.store.subscribe(() => {

this.forceUpdate();

});

}

render() {

const state = this.props.store.getState();

return(

<div style={{textAlign: 'center'}}>

<button onClick={() => {this.props.store.dispatch(goAction)}}

disabled={state == 'GO' || state == 'CAUTION'}

style={{cursor: 'pointer'}}>

Go

</button>

<button onClick={() => {this.props.store.dispatch(cautionAction)}}

disabled={state == 'CAUTION' || state == 'STOP'}

style={{cursor: 'pointer'}}>

Caution

</button>

<button onClick={() => {this.props.store.dispatch(stopAction)}}

disabled={state == 'STOP' || state == 'GO'}

style={{cursor: 'pointer'}}>

Stop

</button>

</div>

)

}

}

redux沉思录的更多相关文章

  1. redux沉思录:基于flux、状态管理、函数式编程的前端状态管理框架

    基于flux和reduce的通信和状态管理机制; 和数据库管理系统一样,redux是一个状态管理系统(或机制). const store = createStore( reducer, compose ...

  2. 【C++沉思录】句柄2

    1.[C++沉思录]句柄1 存在问题: 句柄为了绑定到Point的对象上,必须定义一个辅助类UPoint,如果要求句柄绑定到Point的子类上,那就存在问题了.2.有没有更简单的办法呢? 句柄使用Po ...

  3. 【C++沉思录】句柄1

    1.在[C++沉思录]代理类中,使用了代理类,存在问题: a.代理复制,每次创建一个副本,这个开销有可能很大 b.有些对象不能轻易创建副本,比如文件2.怎么解决这个问题? 使用引用计数句柄,对动态资源 ...

  4. 生活沉思录 via 哲理小故事(四)

    1.围墙里的墓碑 第一次世界大战期间,驻守意大利某小镇的年轻军官结识了镇上的牧师.虽然军官信仰信教,而牧师是天主教牧师,但两人一见如故. 军官在一次执行任务中身负重伤,弥留之际嘱托牧师无论如何要把自己 ...

  5. 生活沉思录 via 哲理小故事

    本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...

  6. 生活沉思录 via 哲理小故事(一)

    1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何 ...

  7. Atitit。 沉思录 与it软件开发管理中的总结 读后感

    Atitit. 沉思录 与it软件开发管理中的总结 读后感 1. <沉思录>,古罗马唯一一位哲学家皇帝马可·奥勒留所著 2 2. 沉思录与it软件开发管理中的总结 2 2.1. 要有自己的 ...

  8. react hooks沉思录

    将UI组件抽象为状态处理机.分为普通状态和副作用状态. 一.综述 useState:处理函数只改变引用的状态本身:副作用状态:会对引用状态以外的状态和变量进行修改:useReducer:用解藕化的机制 ...

  9. applyMiddleware 沉思录

    let newStore = applyMiddleware(mid1, mid2, mid3, ...)(createStore)(reducer, null); 给({ getState, dis ...

随机推荐

  1. 在C++中调用FFTW

    FFTW是一个可以进行可变长度一维或多维DFT的开源C程序库,是目前最快的FFT算法实现. 本文简述了在Windows平台上,如何在C++中调用FFTW,所使用的IDE为Visual Studio 2 ...

  2. Go语言【数据结构】指针

    指针 本章围绕字符串.数字.数组.切片.map.channel.结构体与指针赋值及函数传参的应用剖析 字符串 字符串本身也是StringHeader的结构体,包含Data指针与字符串长度,如下 typ ...

  3. linux 判断一个用户是否存在

    #!/bin/bash read -p "please input a username:" username >&; then echo "user ex ...

  4. FRP represents an intersection of two programming paradigms.

    FRP represents an intersection of two programming paradigms. Functional programming Functional progr ...

  5. linux权限管理(chown、chgrp、chomd)

    一.文件权限 我们以/etc/passwd 文件为例,用ll长列出其属性如下所示 ll /etc/passwd 每个文件针对每类访问访问者都定义了三种权限 文件类型中: p:表示命名管道文件 d:表示 ...

  6. 关于visual studio 2015 智能提示英文,而非中文的解决方案

    关于visual studio 2015 智能提示英文,而非中文的解决方案:   找到这个目录 C:\Program Files (x86)\Reference Assemblies\Microsof ...

  7. C# Newtonsoft.Json 你必须知道的一些用法

    最近在做接口开发,对方团队开发了一个Web API 的接口,传输数据的格式是 JSON.当时看到这个东西,感觉很简单,也没想什么,没用多久就完成了我的功能,我完成的功能很简单,就是获取数据,然后把数据 ...

  8. 第一阶段:Java基础 1.JAVA开发介绍---2. JVM、JRE、JDK之间的关系

    JDK :英文名称(Java Development Kit),Java 开发工具包,是针对 Java 开发员的产品.jdk 是整个 Java 开发的核心,包括了Java运行环境JRE.Java工具和 ...

  9. 查看Linux内核版本

    您可能因多种原因需要确切知道GNU / Linux操作系统上运行的内核版本. 也许您正在调试与硬件相关的问题,或者了解影响旧内核版本的新安全漏洞,并且您想知道您的内核是否易受攻击. 无论是什么原因,从 ...

  10. Kubemetes

    将应用docker化,配合ETCD.kubernetes等工具在容器的层面上实现高可用和负载均衡 容器化部署 容器化部署应用具有灵活.高效的使用资源,容器可以包含其所需的全部文件,如同在虚拟机上部署应 ...