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 相关文章推荐
IFrame跨域高度自适应实现代码
Aug 16 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
js获取select标签的值且兼容IE与firefox
Dec 30 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
javascript自动给文本url地址增加链接的方法分享
Jan 20 Javascript
JavaScript获取URL中参数querystring的方法详解
Oct 11 Javascript
jQuery实现立体式数字动态增加(animate方法)
Dec 21 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
Nov 22 Javascript
详解Vue.js v-for不支持IE9的解决方法
Dec 29 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php Smarty 字符比较代码
2011/02/27 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
Yii配置文件用法详解
2014/12/04 PHP
php实现json编码的方法
2015/07/30 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php socket通信简单实现
2016/11/18 PHP
基于javascript 闭包基础分享
2013/07/10 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
python实现整数的二进制循环移位
2019/03/08 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
企业申诉管理制度
2014/01/30 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
中国好声音华少广告词
2014/03/17 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
年检委托书
2014/08/30 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
无工作证明怎么写
2015/06/15 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
解析redis hash应用场景和常用命令
2021/08/04 Redis
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers