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 通用简单的table选项卡实现
May 07 Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
小程序实现日历左右滑动效果
Oct 21 Javascript
Vue.js的模板语法详解
Feb 16 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
Jun 04 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
多文件上载系统完整版
2006/10/09 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php实现的用户查询类实例
2015/06/18 PHP
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
浅析JS运动
2015/12/28 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python最长回文串算法
2018/06/04 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
Python3的socket使用方法详解
2020/02/18 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
八年级语文教学反思
2014/02/11 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
详解Redis复制原理
2021/06/04 Redis
python双向链表实例详解
2022/05/25 Python
MySQL事务的隔离级别详情
2022/07/15 MySQL