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实现3D球状标签云示例代码
Dec 01 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 Javascript
浅谈Javascript中的Function与Object
Jan 26 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
Sep 19 Javascript
jQuery多选框选择数量限制方法
Feb 08 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
BootStrap 页签切换失效的解决方法
Aug 17 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 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发送post请求函数分享
2014/03/06 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
体育运动口号
2014/06/09 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
一些让Python代码简洁的实用技巧总结
2021/08/23 Python