redux小例子分析
来源:互联网 发布:云数据 编辑:程序博客网 时间:2024/06/05 09:32
看阮一峰大神的redux入门教程,跟着写了一个加减数字功能的小例子,记录一下逻辑分析
reduce文件夹下的index.js
定义个名为counter的reducer,本质是一个纯函数,传入state,action两个参数返回一个新的state
export default function counter(state = 0, action) { switch (action.type) { case 'INCREMENT': return state + 1; case 'DECREMENT': return state - 1; default: return state; }}
components文件夹下的counter.js,定义了Counter组件
import React, { Component} from 'react';import PropTypes from 'prop-types';class Counter extends Component { constructor(props) { super(props); this.incrementIfOdd = this.incrementIfOdd.bind(this);//初始化绑定inrementIfOdd方法 this.incrementAsync = this.incrementAsync.bind(this);//初始化绑定incrementAsync方法 } //定义incrementIfOdd方法,如果value属性值不为偶数,就执行属性中的onIncrement方法 incrementIfOdd() { if (this.props.value % 2 !== 0) { this.props.onIncrement(); } } //定义incrementAsync方法,延迟一秒执行属性中的onIncrement方法 incrementAsync() { setTimeout(this.props.onIncrement, 1000); } render() { //解构赋值,获取属性中的value、onIncrement、onDecrement值 const { value, onIncrement, onDecrement } = this.props; return ( <p> Clicked:{value} times {' '} <button onClick = {onIncrement}> + </button> {' '} <button onClick = {onDecrement}> - </button> {' '} <button onClick = {this.incrementIfOdd}> Increment if odd</button> {' '} <button onClick = {this.incrementAsync}> Increment Async</button> </p> ) }}Counter.propTypes = { value: PropTypes.number.isRequired, onIncrement: PropTypes.func.isRequired, onDecrement: PropTypes.func.isRequired}export default Counter;
src文件夹下的index.js,
import React from 'react';import ReactDom from 'react-dom';import { createStore} from 'redux';import Counter from './components/counter.js';import counter from './reducer/index.js';const store = createStore(counter);//以counter为参数创建storeconst rootEl = document.getElementById('root');const render = function() { ReactDom.render( <Counter value = {store.getState() } onIncrement = {function(){store.dispatch({type:'INCREMENT'})} } onDecrement = {function(){store.dispatch({type:'DECREMENT'})} } />, rootEl )}render();store.subscribe(render);
用户发出action,使用组件属性中的onIncrement方法处理,里面包含了store.dispatch(action);
store.getState()方法获取当前状态state的值
store.subscribe()方法监听state是否变化,变化后调用监听函数
效果如下
参考资料:http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html
阅读全文
0 0
- redux小例子分析
- react-redux 小例子
- redux 简单例子
- ArcGIS缓冲区分析小例子
- 一个正则小例子分析
- redux源码分析
- Redux源码分析
- react-redux原理分析
- redux(一)简单例子
- 小例子分析C#继承机制
- 小例子分析C#继承机制
- Adapter 模式的小例子以及分析
- Adapter 模式的小例子以及分析
- 大数据日志分析小例子
- python数据质量分析小例子
- LEAD分析函数用法小例子
- 一个 tflearn 情感分析小例子
- 一个 tflearn 情感分析小例子
- 513[Medium]:Find Bottom Left Tree Value
- 非编程人学Python,要注意哪些隐秘的错误认知?
- Selenium webdriver 处理alert、confirm弹出框
- 列表滚动改变Toolbar透明度
- 观点:有关DevOps的7个趋势
- redux小例子分析
- arcgis js 空间关系查询
- 【腾讯TMQ】众测白皮书
- [bzoj1150][堆][贪心][CTSC2007]数据备份Backup
- 自定义view基础,onMeasure,onDraw,onTouchEvent,自定义属性
- devmem
- cef 介绍
- 128. Longest Consecutive Sequence
- cvc-elt.1: 找不到元素 'beans' 的声明,错误解决方案