dva实例Counter

import dva, { connect } from 'dva';
import { Router, Route } from 'dva/router';
import styles from './index.less'; const app = dva(); function XX() {
this.events = {};
} XX.prototype.addListener = function(event, listener) {
if(!this.events.hasOwnProperty(event)) {
this.events[event] = listener;
}
} XX.prototype.trigger = function(event) {
if(this.events.hasOwnProperty(event)) {
(this.events[event])()
}
} const xx = new XX(); app.model({
namespace: 'count',
state: {
record: 0,
current: 0,
},
reducers: {
add(state) {
const newCurrent = state.current + 1;
return {
...state,
record: newCurrent > state.record ? newCurrent : state.record,
current: newCurrent
}
},
minus(state) {
return {
...state,
current: state.current - 1
};
},
},
subscriptions: {
clickWatcher({dispatch}) {
xx.addListener('click', () => {dispatch({type: 'minus'})})
}
},
effects: {
*add(action, {call, put}) {
yield call(delay, 1000);
yield put({type: 'minus'});
}
}
}); const SubButton = () => {
return (
<button onClick={() => xx.trigger('click')}>subButton</button>
)
} const CountApp = ({count, dispatch}) => {
return (
<div className={styles.normal}>
<div className={styles.record}>Highest Record: {count.record}</div>
<div className={styles.current}>{count.current}</div>
<div className={styles.button}>
<button onClick={() => { dispatch({type: 'count/add'}); }}>+</button>
</div>
<SubButton />
</div>
)
} function mapStateToProps(state) {
return {
count: state.count
};
} const HomePage = connect(mapStateToProps)(CountApp); app.router(({history}) =>
<Router history={history}>
<Route path="/" component={HomePage} />
</Router>
) app.start('#root'); // -------------
// Helpers function delay(timeout) {
return new Promise(resolve => {
setTimeout(resolve, timeout)
})
}

.normal {
width: 200px;
margin: 100px auto;
padding: 20px;
border: 1px solid #ccc;
box-shadow: 0 0 20px #ccc;
} .record {
border-bottom: 1px solid #ccc;
padding-bottom: 8px;
color: #ccc;
} .current {
text-align: center;
font-size: 40px;
padding: 40px 0;
} .button {
text-align: center;
button {
width: 100px;
height: 40px;
background: #aaa;
color: #fff;
}
}

最新文章

  1. Hadoop之Storm安装
  2. VC++6.0编译器标记的那些内存值
  3. 使用Intellij idea开发
  4. PPP模式下的融资结构优化
  5. iOS小游戏打地鼠
  6. nginx作反向代理,实现负载均衡
  7. ubuntu安装mariadb
  8. Node.js权威指南 (4) - 模块与npm包管理工具
  9. android离线下载的相关知识
  10. nyoj201 作业题
  11. Ajax 用法, 实现方法,JS原生与JQ实现
  12. win7 64位andriod开发环境搭建
  13. lazy ideas in programming(编程中的惰性思想)
  14. NYoj_49开心的小明
  15. Part 7:自定义admin站点--Django从入门到精通系列教程
  16. Spring整合quartz框架实现任务定时调度
  17. Linux之dmesg命令
  18. LeetCode【110. 平衡二叉树】
  19. PopupWindow 以及拍照、裁剪
  20. Android获取文件夹下的所有子文件名称;

热门文章

  1. Linux之ansible 常用模块
  2. webpack打包优化
  3. IO输入输出流
  4. Python开发【第十篇】:RabbitMQ队列
  5. python的re模块详解
  6. 制作docker基础镜像
  7. Ruby http/net 中连接超时问题
  8. windows下的mongodb安装与配置
  9. OkHttp的get和post请求
  10. Oracle 有排序的分页SQL写法