要素: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. 【题解】【网络流24题】汽车加油行驶问题 [P4009] [Loj6223]

    [题解][网络流24题]汽车加油行驶问题 [P4009] [Loj6223] 传送门:汽车加油行驶问题 \([P4009]\) \([Loj6223]\) [题目描述] 给出一个 \(N \times ...

  2. 在 docker 安装 jenkins (解决无法访问jenkins的错误)

    前提:安装好docker. 拉取Jenkins镜像: python docker pull jenkins 遇到错误:Docker:TLS handshake timeout错误 原因:国外,网速慢, ...

  3. Java之利用Freemarker模板引擎实现代码生成器,提高效率

    https://blog.csdn.net/huangwenyi1010/article/details/71249258  java模板引擎freemarker代码生成器 更多 个人分类: 一步一步 ...

  4. Boleto 银行付款

    Boleto是由多家巴西银行共同支持的一种支付方式,在巴西占据绝对主导地位,客户可以到巴西任何一家银行.ATM机.caipiao网点或使用网上银行授权银行转账. 该支付渠道有如下特点:1. 一旦付款, ...

  5. Android四大组件——Activity跳转动画、淡出淡入、滑出滑入、自定义退出进入

    Activity跳转动画.淡入淡出.滑入滑出.自定义退出进入 前言: 系统中有两个定义好的Activity跳转动画:fade_in.fade_out.slide_in_left.slide_out_r ...

  6. axios + vue导出excel文件

    (使用到了elementUI框架) <template> <el-button type="primary" size="mini" @cli ...

  7. CORS-跨域资源共享 解决跨域问题

    1.什么是跨域? a.test.com 和 b.test.com 是两个不同的域,而处于安全机制考虑,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容,但是我们在项目开发时,经常遇到一个页 ...

  8. Object中defineProperty数据描述

    Object.defineProperty是对对象中的属性进行数据描述的 使用语法: Object.defineProperty(obj,prop,descriptor) 使用示例: var data ...

  9. 财产PROPRETIE英语PROPRETIE房地产

    property Alternative forms propretie English English Wikipedia has articles on: Property (disambigua ...

  10. grpc:超时机制

    工作中遇到一个问题,上游服务通过grpc调用下游服务,但是由于下游服务负载太高导致上游服务的调用会随机出现超时的情况,但是有一点不太明确:超时之后,下游服务还会继续进行计算么? 于是自己写了一个dam ...