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 07 Javascript
图片自动缩小的js代码,用以防止图片撑破页面
Mar 12 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
Mar 16 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
Jul 02 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
Node.js 异步编程之 Callback介绍(一)
Mar 30 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
javascript实现数字倒计时特效
Mar 30 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
基于daterangepicker日历插件使用参数注意的问题
Aug 10 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
Jul 22 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
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实现多级树型菜单
2006/10/09 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
js运动应用实例解析
2015/12/28 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
应届生程序员求职信
2013/11/05 职场文书
上课说话检讨书大全
2014/01/22 职场文书
学期个人自我总结
2015/02/13 职场文书
医学生自荐信范文
2015/03/05 职场文书
人民的好儿女观后感
2015/06/18 职场文书
人力资源部工作计划
2019/05/14 职场文书