react-redux: counter
store:
import {createStore,applyMiddleware, compose} from "redux";
import thunk from "redux-thunk";
import rootReducer from "./reducers/rootReducer";
const middlewares = [
applyMiddleware(thunk)
];
const store = initialState => createStore(rootReducer, initialState, compose(...middlewares));
export default store;
rootReducer:
import {combineReducers} from "redux";
import {reducer as toastr} from "react-redux-toastr";
const rootReducer = combineReducers({
toastr,
counterReducer
});
export default rootReducer;
counterReducer:
import * as types from "../actions/actionType";
const initialState = {
count: 0
};
const counterReducer = function (state = initialState, action) {
const count = state.product;
switch (action.type) {
case types.INCREMENT:
return {count: count + 1};
case types.DECREMENT:
return {count: count - 1};
default:
return state;
}
};
export default counterReducer;
actionType:
export const INCREMENT = 'INCREMENT';
export const DECREMENT = 'DECREMENT';
Counter:
import {connect} from "react-redux";
import * as types from "actions/actionType";
const mapStatetoProps = state =>{
return {
value: state.counterReducer.count
}
}
const mapDispatchToProps =dispatch => {
return {
onIncrement: ()=>dispatch({type: types.INCREMENT}),
onDecrement: ()=>dispatch({type: types.DECREMENT})
}
}
class Counter extends React.Component {
render() {
const {count, onIncrement, onDecrement} = this.props;
return (
<div>
<span>{count}</span>
<button onClick={onIncrement}>+</button>
<button onClick={onDecrement}>-</button>
</div>
)
}
}
const CounterContainer = connect(
mapStateToProps,
mapDispatchToProps
)(Counter)
export default CounterContainer;
counterAction:
import * as types from "./actionType";
export function increment(count) {
return {
type: types.INCREMENT,
count
}
}
export function decrement(count) {
return {
type: types.DECREMENT,
count
}
}
onIncrement: ()=>dispatch({type: types.INCREMENT}) =》
onIncrement: (count)=>dispatch(actions.increment(count)),
use redux-actions:
import {createAction} from "redux-actions";
import * as types from "./actionType";
export const increment = createAction(types.INCREMENT);
export const decrement = createAction(types.DECREMENT);
Redux Thunk 中间 件 可以 让 action 创建 函数 先不 返回 action 对象, 而是 返回 一个 函数。 通过 这个 函数 延迟 dispatch 或者 只在 满足 指定 条件 的 情况下 dispatch。 这个 内部 函数 接受 store 的 两个 方法 dispatch 和 getState 作为 参数。
update action:
import {createAction} from "redux-actions";
import * as types from "../../constant/ActionType";
export const increment = createAction(types.INCREMENT);
export const decrement = createAction(types.DECREMENT);
export function incrementIfOdd() {
return (dispatch, getStore) => {
const count = getStore().CounterReducer.count;
if (count % 2 ==0) {
return
}
dispatch(increment())
}
}
update container :
import React from "react";
import {connect} from "react-redux";
import {Row, Col, Button} from "antd"; import * as actions from "../../reduxModel/actions/CounterAction";
import "./index.scss"; const mapStateToProps = state => {
return {value: state.CounterReducer.count}
};
const mapDispatchToProps = {
onIncrement: actions.increment,
onDecrement: actions.decrement,
onIncrementIfOdd: actions.incrementIfOdd
}; class Home extends React.Component{ render() {
const {value, onIncrement, onDecrement, onIncrementIfOdd} = this.props;
return (
<div className="app-home">
<div className="app-layout-container">
<Row type="flex" justify="center" className="app-layout-body">
<Col span={4}>
sidebar
</Col>
<Col span={20} className="page-panel">
welcome Home
<div className="form-btn-group">
<span>{value}</span>
<Button type="dashed" htmlType="button" onClick={onIncrement}>+</Button>
<Button type="dashed" htmlType="button" onClick={onDecrement}>-</Button>
<Button type="dashed" htmlType="button" onClick={onIncrementIfOdd}>add if odd</Button>
</div>
</Col>
</Row>
</div>
</div>
)
}
}
const HomeContainer = connect(
mapStateToProps,
mapDispatchToProps
)(Home); export default HomeContainer;
react-redux: counter的更多相关文章
- react+redux教程(六)redux服务端渲染流程
今天,我们要讲解的是react+redux服务端渲染.个人认为,react击败angular的真正“杀手锏”就是服务端渲染.我们为什么要实现服务端渲染,主要是为了SEO. 例子 例子仍然是官方的计数器 ...
- react+redux教程(四)undo、devtools、router
上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...
- react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware
今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...
- React+Redux学习笔记:React+Redux简易开发步骤
前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...
- react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写p ...
- React Redux 与胖虎
这是一篇详尽的 React Redux 扫盲文. 对 React Redux 已经比较熟悉的同学可以直接看 <React Redux 与胖虎他妈>. 是什么 React Redux 是 R ...
- webpack+react+redux+es6开发模式
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
- react+redux官方实例TODO从最简单的入门(6)-- 完结
通过实现了增-->删-->改-->查,对react结合redux的机制差不多已经了解,那么把剩下的功能一起完成吧 全选 1.声明状态,这个是全选状态 2.action约定 3.red ...
- react+redux官方实例TODO从最简单的入门(1)-- 前言
刚进公司的时候,一点react不会,有一个需求要改,重构页面!!!完全懵逼,一点不知道怎么办!然后就去官方文档,花了一周时间,就纯react实现了页面重构,总体来说,react还是比较简单的,由于当初 ...
随机推荐
- DateTimeTypeHandler
mysql-timestimp-------model-DateTime(jodatime) public class DataTimeTypeHandler extends BaseTypeHand ...
- The Unreasonable Effectiveness of Recurrent Neural Networks (RNN)
http://karpathy.github.io/2015/05/21/rnn-effectiveness/ There’s something magical about Recurrent Ne ...
- 利用SimpleHttpServer+urllib传文件
1.服务器 利用SimpleHTTPServer,命令行运行 python -m SimpleHTTPServer 2.客户端 利用urllib等,方法有3个 import urllib print ...
- python16_day13【css、js】
一.部局 1.pg-header(title) .pg-header{ height: 48px; background-color: cadetblue; line-height: 48px; mi ...
- go——变量
在数学概念中,变量(variable)表示没有固定值且可以改变的数.但从计算机系统实现角度来看,变量是一段或多段用来存储数据的内存.作为静态类型语言,Go语言总是有固定的数据类型,类型决定了变量内存的 ...
- 【转】PCA与Whitening
PCA: PCA的具有2个功能,一是维数约简(可以加快算法的训练速度,减小内存消耗等),一是数据的可视化. PCA并不是线性回归,因为线性回归是保证得到的函数是y值方面误差最小,而PCA是保证得到的函 ...
- Spark机器学习3·推荐引擎(spark-shell)
Spark机器学习 准备环境 jblashttps://gcc.gnu.org/wiki/GFortranBinaries#MacOS org.jblas:jblas:1.2.4-SNAPSHOT g ...
- Http请求的TCP连接
我们一直认为,HTTP连接分为长连接和短连接,而我们现在常用的都是HTTP1.1,因此我们用的都是长连接. 这句话其实只对了一半,我们现如今的HTTP协议,大部分都是1.1的,因此我们平时用的基本上都 ...
- linux根分区满了如何处理,查找大文件方法
一:如果linux根分区使用量达到100%,会造成如下现象: root不能登录 系统不能正常启动 二:通过命令查找根分区内的大文件 du -sh /* 2>/dev/null | sort -h ...
- HTTP响应代码集合
用于表示临时响应并需要请求者执行操作才能继续的状态代码.代码说明100(继续)请求者应当继续提出请求.服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余部分. 101(切换协议 ...