40_redux_counter应用_redux完善版本
项目结构:
代码:
import React from 'react'; import ReactDOM from 'react-dom'; import store from './redux/store' import App from './components/app'; function render() { ReactDOM.render(<App store={store}/>, document.getElementById('root')); } //初始化渲染 render() //订阅监听(store中的状态变化了,就会自动调用重绘) store.subscribe(render)
index.js
import React, {Component} from 'react' import * as actions from '../redux/actions' export default class App extends Component { increment = () => { //1.得到选择的增加数量 const number = this.select.value * 1 //2.调用store的方法更新状态 this.props.store.dispatch(actions.increment(number)) }; decrement = () => { //1.得到选择的增加数量 const number = this.select.value * 1 //2.调用store的方法更新状态 this.props.store.dispatch(actions.decrement(number)) }; incrementIfOdd = () => { //1.得到选择的增加数量 const number = this.select.value * 1 //2.得到原本的count状态 const count = this.props.store.getState() //3.判断,满足条件再更新状态 if (count % 2 === 1) { //调用store方法更新状态 this.props.store.dispatch(actions.increment(number)) } } incrementAsync = () => { //1.得到选择的增加数量 const number = this.select.value * 1 //启动延时定时器 setTimeout(() => { this.props.store.dispatch(actions.decrement(number)) }, 1000) }; render() { const count = this.props.store.getState() // debugger return ( <div> <p>click {count} times</p> <div> <select ref={select => this.select = select}> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <button onClick={this.increment}>+</button> <button onClick={this.decrement}>-</button> <button onClick={this.incrementIfOdd}>increment odd</button> <button onClick={this.incrementAsync}>increment async</button> </div> </div> ) } }
app.jsx
import {createStore} from 'redux'; import {counter} from './reducers'; //生成store对象 const store = createStore(counter);//内部会第一次调用reduer函数得到初始state console.log(store, store.getState()); export default store
store.js
import {INCREMENT, DECREMENT} from '../redux/action-types'; /* * 包含所有action creator * */ //增加 export const increment = (number) => ({ type: INCREMENT, data: number }) //减少 export const decrement = (number) => ({ type: DECREMENT, data: number })
actions.js
40_redux_counter应用_redux完善版本的更多相关文章
- 给WPF示例图形加上方便查看大小的格子之完善版本
原文:给WPF示例图形加上方便查看大小的格子之完善版本 去年10月份, 我曾写过一篇"给WPF示例图形加上方便查看大小的格子"的BLOG(http://blog.csdn.net/ ...
- iOS----友盟分享完善版本
分享 详细集成 注意:1.线上集成文档的示例代码对应的是最新版本的SDK,如果你所用的SDK版本类名或者方法名与此文档不符合,请看随包里面的线下文档或者下载使用最新版本的SDK. 设置友盟appkey ...
- 一个自己实现的Vector 完善版本
一个自己实现的Vector(只能处理基本类型数据) 转载自: https://www.ev0l.art/index.php/archives/22/ string 类型不行 bool char* in ...
- 42_redux_counter应用_redux异步版本
前言: redux默认不支持异步编程,需要下载redux插件(异步中间件) 如何下载: npm install --save redux-thunk 项目结构: 代码: import React, { ...
- c coroutine
今天看了下云风c coroutine 代码 博客,发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级. 具体实现 1. 创建一个coroutine: 也就 ...
- Python数据库迁移脚本(终极版)
上次的那几个脚本这次全部整合到了一起,而且后面发现了一个可以使用的ODBC包,于是这次采用的方式就很简单了,直接通过ODBC将InterBase数据库中的数据全部取出来之后通过Python的sqlal ...
- 不一样的角度 解读微信小程序
不一样的角度 解读微信小程序 七月在夏天· 2 天前 前段时间看完了雨果奖中短篇获奖小说<北京折叠>.很有意思的是,张小龙最近也要把应用折叠到微信里,这些应用被他称为:小程序. 含着金钥匙 ...
- 【java 上传+下载】
一.先说说上传 第一步:pom.xml文件 加上 上传文件依赖架包 <dependency> <groupId>commons-fileupload</groupId&g ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
随机推荐
- jquery案例
调用js成员 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>& ...
- UCenter通信原理
https://www.jb51.net/article/59666.htm 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也 ...
- 正则替换HTML里的style属性
一个网友问: <p class="a" style="font-size: 12pt; font-family: ""; color: red ...
- IPv6学习笔记
IPv6简写规范: 1) 每个IPv6地址段起始的0可以被省略: 2) 如果一段为4个零,可以简写为一个0 3) 如果有连续的多个段全为0,则可以使用::表示 注:一个地址段中只能有一个::出现 ...
- Ignite(二): 架构及工具
1.集群和部署 Ignite集群基于无共享架构,所有的集群节点都是平等的,独立的,整个集群不存在单点故障. 通过灵活的Discovery SPI组件,Ignite节点可以自动地发现对方,因此只要需要, ...
- Django的安装和启动以及第一个工程的建立
---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...
- puzz: 图片和表单上传的不一致问题
1. 方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2. 方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...
- Android手机不插USB,使用adb网络远程调试
最近做项目,需要在手机不插USB的情况下连接设备查看打印的日志,发现可以通过adb connect命令实现: 1.先把手机通过USB与电脑相连 2.使用adb tcpip 5555命令,打开手机的55 ...
- truffle init 从零开始创建简单DApp项目
下面的部分软件需要FQ.这里默认你已经会***,不懂的可以自己搜索解决. 软件安装 chrome浏览器 下载地址 metamask插件 在谷歌应用商店中搜索metamask ganche(图形版) 下 ...
- 禅知Pro 1.6 前台任意文件读取 | 代码审计
禅知 Pro v1.6 前台任意文件读取 | 代码审计 蝉知专业版是基于蝉知企业门户系统开源版开发,继承了蝉知本身的优秀功能.相对于蝉知开源版增强了商品的属性自定义.属性价格定制.物流跟踪.微信支付. ...