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 相关文章推荐
javascript 隔行换色函数代码
Oct 24 Javascript
使用javascript创建快捷方式的简单实例
Aug 09 Javascript
一个JavaScript的求爱小特效
May 09 Javascript
iframe跨域通信封装详解
Aug 11 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
jquery 判断是否支持Placeholder属性的方法
Feb 07 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
BootstrapTable加载按钮功能实例代码详解
Sep 22 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
小程序实现文字循环滚动动画
Jun 14 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php获取mysql版本的几种方法小结
2008/03/25 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
表单内同名元素的控制
2006/11/22 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python help()函数用法详解
2014/03/11 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Django学习之文件上传与下载
2019/10/06 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
升职自荐信范文
2013/10/05 职场文书
勾股定理课后反思
2014/04/26 职场文书
国旗下的演讲稿
2014/05/08 职场文书
计生专干事迹
2014/05/28 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
微信搭讪开场白
2015/05/28 职场文书
汽车销售员工作总结
2015/08/12 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
js实现自动锁屏功能
2021/06/02 Javascript
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技