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 相关文章推荐
js操作select控件的几种方法
Jun 02 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
Sortable.js拖拽排序使用方法解析
Nov 04 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
在vue项目中使用sass语法问题
Jul 18 Javascript
javascript实现blob加密视频源地址的方法
Aug 08 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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程序猿都应该拜读的书
2014/12/31 PHP
php array_map()函数实例用法
2021/03/03 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
JS逆序遍历实现代码
2014/12/02 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
社区十八大感言
2014/01/19 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
商业街策划方案
2014/05/31 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
陪护人员误工证明
2015/06/24 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
学习nginx基础知识
2021/09/04 Servers