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 $.each的用法说明
Mar 22 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
jquery构造器的实现代码小结
May 16 Javascript
用jquery中插件dialog实现弹框效果实例代码
Nov 15 Javascript
javascript实现动态模态绑定grid过程代码
Sep 22 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
Jul 09 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
layui之数据表格--与后台交互获取数据的方法
Sep 29 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 Javascript
使用Vant完成Dialog弹框案例
Nov 11 Javascript
JavaScript实现两个数组的交集
Mar 25 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
js实现二级导航功能
2017/03/03 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
九步学会Python装饰器
2015/05/09 Python
python 实现UTC时间加减的方法
2018/12/31 Python
详解python pandas 分组统计的方法
2019/07/30 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
python drf各类组件的用法和作用
2021/01/12 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
软件工程专业推荐信
2013/10/28 职场文书
具结保证书范本
2015/05/11 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang