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结合css实现网页换肤功能
Nov 02 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
js实现仿爱微网两级导航菜单效果代码
Aug 31 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
vue.js之vue-cli脚手架的搭建详解
May 05 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
vue开发拖拽进度条滑动组件
Sep 21 Javascript
js+canvas绘制图形验证码
Sep 21 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 动态多文件上传
2009/01/18 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
探讨php中header的用法详解
2013/06/07 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
用vue构建多页面应用的示例代码
2017/09/20 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
JavaScript canvas绘制折线图
2020/02/18 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python使用循环实现批量创建文件夹示例
2014/03/25 Python
用python代码做configure文件
2014/07/20 Python
python将字符串转换成数组的方法
2015/04/29 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
服务中心夜班服务员岗位职责
2013/11/27 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
电子信息工程自荐信
2014/05/26 职场文书
本科毕业生自荐信
2014/06/02 职场文书
毕业论文致谢信
2015/05/14 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书