react redux入门示例


Posted in Javascript onApril 19, 2018

环境准备

为了方便,这里使用create-react-app搭建react环境

create-react-app mydemo

弹出配置

如果需要自定义react的配置,需要运行下面的命令把配置文件弹出来。

npm run eject

安装redux

npm i redux --save

简单理解

redux简单用法就是通过它的store来订阅和发布信息。

通过subscribe来订阅action,通过dispatch来触发action。reducer中定义来各个action要做的事情。

demo代码

reducer定义

const Add = 'addGirl', Remove = "removeGirl";
export function reducer(state = 0, action) {
  switch (action.type) {
    case Add:
      return state + 1;
    case Remove:
      return state - 1;
    default:
      return 10;
  }
}

//action creator,把action封装成一个方法,这样用的时候不用每次定义,避免出错
export function addCreator() {
  return { type: Add };
}
export function removeCreator() {
  return { type: Remove };
}

export function addAsync() {
  return (dispatch, getState) => {
    setTimeout(function () {
      dispatch(addCreator());
    }, 1000);
  }
}

入口文件index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import { createStore } from 'redux';
import thunk from 'redux-thunk';
import { reducer,addCreator,removeCreaator } from './index.redux';
import { Provider } from 'react-redux'
const store = createStore(reducer);
function render() {
  ReactDOM.render(
    <App store={store} addCreator={addCreator} removeCreator={removeCreator} />,
    document.getElementById('root')
  );
}
//封装成方法,方便下面的store的订阅调用
render();
//每当dispatch时,订阅的函数就会执行
store.subscribe(render);
registerServiceWorker();

App.js

import React, { Component } from 'react';
import './App.css';
class App extends Component {
 render() {
  var store=this.props.store;
  var num=store.getState();
  return (
   <div className="App">
    <h1>现在有机关枪{this.props.num}把。</h1>
    <button onClick={() => { store.dispatch(this.props.addCreator()) }}>add</button>
    <button onClick={() => { store.dispatch(this.props.removeCreator()) }}>remove</button>
   </div >
  );
 }
}
export default App;

通过store的dispatch来触发action,index.js中订阅的事件就会执行。

redux的异步执行

redux中如果需要执行异步操作,需要安装react-thunk插件

npm i react-thunk --save

同时需要redux插件的applyMiddleware

关键代码

设置其实很简单,创建store时,把thunk传递给它就行了。

import thunk from 'redux-thunk';

const store = createStore(reducer, applyMiddleware(thunk));

在app.js中增加一个触发异步操作的按钮,reducer中已经定义了一个异步的方法。

export function addAsync() {
  return (dispatch, getState) => {
    setTimeout(function () {
      dispatch(addCreator());
    }, 1000);
  }
}

异步调用方法会返回一个有两个参数的方法,两个参数都是函数,第一个是dispatch函数,第二个是getState函数。
dispatch触发action,getState获取state的值。

在app.js中增加代码

<button onClick={() => { store.dispatch(this.props.addAsync()) }}>addAsync</button>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
May 09 Javascript
Jquery $when done then的用法详解
May 20 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 Javascript
js原生方法被覆盖,从新赋值原生的方法
Jan 02 Javascript
详解用Node.js写一个简单的命令行工具
Mar 01 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
Apr 23 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
JS实现读取xml内容并输出到div中的方法示例
Apr 19 #Javascript
使用typescript开发angular模块并发布npm包
Apr 19 #Javascript
Angular 封装并发布组件的方法示例
Apr 19 #Javascript
angular第三方包开发整理(小结)
Apr 19 #Javascript
如何从零开始利用js手写一个Promise库详解
Apr 19 #Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
Apr 18 #Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 #Javascript
You might like
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
babel的使用及安装配置教程
2018/02/22 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
提高python代码运行效率的一些建议
2020/09/29 Python
python中的yield from语法快速学习
2020/11/06 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
给老师的道歉信
2014/01/11 职场文书
就业自我评价
2014/02/04 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
工作建议书范文
2014/05/13 职场文书
领导班子四风表现材料
2014/08/23 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL