详解react-redux插件入门


Posted in Javascript onApril 19, 2018

可先查看我的redux简单入门

react-redux简介

react-redux是使用redux开发react时使用的一个插件,另外插一句,redux不是react的产品,vue和angular中也可以使用redux;下面简单讲解,如何使用react-redux来开发react。

描述

这个插件可以让我们的redux代码更加的简洁和美观。我假设你已经有一个使用create-react-app创建的一个可以显示hello world的react环境,并且已经安装来redux。

注意:如果是刚使用create-react-app创建的,需要运行 npm run eject弹出个性化设置,这样就可以自定义配置了。

安装

npm i react-redux --save

使用

react-redux提供了两个重要的接口:Provider、connect,使用了这个插件,react-redux的subscribe和dispatch就可以忘记来,它们就用不着了。

代码结构

//index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { reducer } from './index.redux';
import { Provider } from 'react-redux'

const store = createStore(reducer, applyMiddleware(thunk));

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

registerServiceWorker();

Provider中应用的最外层,把store传给它,只使用这一次。

//app.js

import React, { Component } from 'react';
import { addCreator, removeCreator, addAsync } from './index.redux';
import { connect } from 'react-redux';
class App extends Component {
 render() {
  return (
   <div className="App">
    <h1>现在有美女{this.props.num}个。</h1>
    <button onClick={this.props.addCreator}>add</button>
    <button onClick={this.props.removeCreator}>remove</button>
    <button onClick={this.props.addAsync}>addAsync</button>
   </div >
  );
 }
}

//定义把state中哪个属性放到props中
 function mapStateToProps(state) {
  return { num: state }
 }
 //定义把哪些方法放到props中
 const actionCreators={ addCreator, removeCreator, addAsync };
 //connect其实就是一个高阶组件,把app传进去,返回一个新的app组件
 App = connect(mapStateToProps, actionCreators)(App);
export default App;

connect负责从外部获取组件需要的参数。通过connect定义后,放到props中的属性和方法就可以直接通过this.props来获取。

下面是reducer的定义。

//react.redux.js

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;
  }
}

export function addCreator() {
  return { type: Add };
}
export function removeCreator() {
  return { type: Remove };
}

export function addAsync() {
  return (dispatch, getState) => {
    setTimeout(function () {
      dispatch(addCreator());
    }, 1000);
  }
}

使用装饰器的方式更优雅的写Conect

首先需要安装babel-plugin-transform-decorators-legacy,并在package.json中配置。

安装

npm i babel-plugin-transform-decorators-legacy --save-dev 这个只是开发使用,所以安装到--save-dev

配置

配置babel的plugins属性

"babel": {
  "presets": [
   "react-app"
  ],
  "plugins": [
   ["transform-decorators-legacy"]
  ]
 }

修改原来写法
使用@connect来重新定义,写到class的上头即可。

//App.js

@connect((state) => ({ num: state }),{ addCreator, removeCreator, addAsync })
class App extends Component {
.....//省略


// function mapStateToProps(state) {
//  return { num: state }
// }
// App = connect(mapStateToProps, { addCreator, removeCreator, addAsync })(App);

VS Code 装饰器提示“experimentalDecorators”的解决办法

点击Visual Studio Code左下角的配置按钮(或者文件>首选项>配置,Windows环境),打开用户设置窗口,在搜索框内输入“experimentalDecorators”,发现竟然能够找到选项,如下:

"javascript.implicitProjectConfig.experimentalDecorators": false

改成true就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现弹出层完美居中效果
Mar 03 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
Javascript自定义事件详解
Jan 13 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
vue实现添加与删除图书功能
Oct 07 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
vuex state及mapState的基础用法详解
Apr 19 #Javascript
使用vuex的state状态对象的5种方式
Apr 19 #Javascript
react redux入门示例
Apr 19 #Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 #Javascript
使用typescript开发angular模块并发布npm包
Apr 19 #Javascript
Angular 封装并发布组件的方法示例
Apr 19 #Javascript
angular第三方包开发整理(小结)
Apr 19 #Javascript
You might like
PHP分页函数代码(简单实用型)
2010/12/02 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
flexigrid 参数说明
2010/11/23 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
js随机生成一个验证码
2017/06/01 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
python提示No module named images的解决方法
2014/09/29 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
openCV提取图像中的矩形区域
2020/07/21 Python
python里反向传播算法详解
2020/11/22 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
华为python面试题
2016/05/03 面试题
应届生法律求职信
2013/10/22 职场文书
大学自我鉴定范文
2013/12/26 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
教师节班会开场白
2015/06/01 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书