前言

redux和react-redux的关系:
  redux就是一个存储数据的对象,并提供了获取/设置store中的属性的解决方案,react-redux是连接react和redux桥梁的封装。

使用

0.目录结构
  未标明[type=dir]就是文件,否则是文件夹

|__package.json
src
|____
_redux [type=dir]
components [type=dir]
|____
Header.js
Main.js
ThemeSwitch.js
store [type=dir]
App.js
index.js

1.由于版本问题有时候会引来大坑,所以贴一下版本号
  package.json

{
"name": "mydemo3",
"version": "0.1.0",
"private": true,
"dependencies": {
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-redux": "^5.0.7",
"react-scripts": "1.1.4",
"redux": "^4.0.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker'; import { Provider } from 'react-redux' //从react-redux中取出包裹层组件
import store from './store/store' //取出初始化的store文件 ReactDOM.render(
<Provider store={store}>
<App />
</Provider>, document.getElementById('root')); registerServiceWorker();

App.js

import React, { Component } from 'react'
import Header from './components/Header'
import Content from './components/Main'
import './index.css' class App extends Component {
render () {
return (
<div>
<Header />
<Content />
</div>
)
}
} export default App

reducer.js

export const themeReducer = (state, action) => {
if (!state) return {
themeColor: 'red'
}
switch (action.type) {
case 'CHANGE_COLOR':
return { ...state, themeColor: action.themeColor }
default:
return state
}
}

store.js

import { createStore } from 'redux'
import { themeReducer } from './reducer' const store = createStore(themeReducer) export default store

Header.js

import React, { Component } from 'react'
import { connect } from 'react-redux' class Header extends Component {
render () {
return (
<h1 style={{ color: this.props.themeColor }}>this is header</h1>
)
}
} const mapStateToProps = (state) => {
return {
themeColor: state.themeColor
}
} Header = connect(mapStateToProps)(Header) export default Header

Main.js

import React, { Component } from 'react'
import ThemeSwitch from './ThemeSwitch'
import { connect } from 'react-redux' class Content extends Component {
constructor () {
super()
this.state = { themeColor: '' }
} render () {
return (
<div>
<p style={{ color: this.props.themeColor }}>this is content</p>
<ThemeSwitch />
</div>
)
}
} const mapStateToProps = state => {
return {
themeColor: state.themeColor
}
} Content = connect(mapStateToProps)(Content) export default Content

ThemeSwitch .js

import React, { Component } from 'react'
import { connect } from 'react-redux' class ThemeSwitch extends Component {
constructor () {
super()
this.state = { themeColor: '' }
} // dispatch action 去改变颜色
handleSwitchColor = (color) => {
if (this.props.onSwitchColor) {
this.props.onSwitchColor(color)
}
} render () {
return (
<div>
<button
style={{ color: this.props.themeColor }}
onClick={()=>{ this.handleSwitchColor('green') }}>Red</button>
<button
style={{ color: this.props.themeColor }}
onClick={()=>{ this.handleSwitchColor('blue') }}>Blue</button>
</div>
)
}
} const mapStateToProps = state => {
return {
themeColor: state.themeColor
}
} const mapDispatchToProps = (dispatch) => {
return {
onSwitchColor: (color) => {
dispatch({ type: 'CHANGE_COLOR', themeColor: color })
}
}
} ThemeSwitch = connect(mapStateToProps, mapDispatchToProps)(ThemeSwitch) export default ThemeSwitch

主要的几点:
1、index.js中:
  import { Provider } from 'react-redux'这里要从redux中引入,而不是redux中引入。
  <Provider store={store}><App /> </Provider>'这里要把store传入组件Provider,然后必须把App组件放入其中。

2、store/store.js中:
  主要是为了初始化redux。

3、connect
  是将:store的指定属性、方法注入到组件的this.props中去。

实例地址:
https://github.com/wenwenwei/learn-project/tree/master/react-redux

想要更深入理解reudx可以参考文章:
https://segmentfault.com/a/1190000012976767#articleHeader14

react学习之redux和redux-react用法的更多相关文章

  1. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  2. React学习资料

    以下是我整理的React学习资料,包括:React基础.Redux.reat-router, redux middleware, higher order components, React验证等, ...

  3. React学习笔记(一) 基础知识

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我. React的基 ...

  4. (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去

    原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...

  5. AntDesign(React)学习-1 创建环境

    目录: AntDesign(React)学习-15 组件定义.connect.interface AntDesign(React)学习-14 使用UMI提供的antd模板 AntDesign(Reac ...

  6. React系列(一):React入门

    React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据 ...

  7. React学习之redux

    在阅读本文之前,希望大家对以下知识点能提前有所了解并且上好厕所(文章有点长): 状态提升的概念 react高阶组件(函数) es6基础 pure 组件(纯函数) Dumb 组件 React.js的co ...

  8. react系列(四)Redux基本概念和使用

    Redux基本概念和使用 先从Flux开始 先放一个Flux官网的链接.需要fq. Flux是Facebook提出的一种构建客户端网页应用的应用架构,它是一种抽象程度很高的设计模式,鼓励单向数据流. ...

  9. React:快速上手(5)——掌握Redux(2)

    React:快速上手(5)——掌握Redux(2) 本文部分内容参考阮一峰的Redux教程. React-Redux原理 React-Redux运行机制 我觉得这张图清楚地描述React-Redux的 ...

  10. React:快速上手(4)——掌握Redux(1)

    React:快速上手(4)——掌握Redux 引入Redux 混乱的state管理 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状 ...

随机推荐

  1. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)

    目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...

  2. log4j 2 入门实例(3)

    继承机制 所有logger都继承自root logger. 可以认为名为log4j2learn.Hello的logger继承自名为log4j2learn的logger. log4j会先查找名称是&qu ...

  3. Java for LeetCode 117 Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  4. contenttype应用 , 缓存相关

    一. Django的contenttypes contenttypes 是Django内置的一个应用,可以追踪项目中所有 app和model 的对应关系,并记录在 django_content_typ ...

  5. TensorFlow框架(6)之RNN循环神经网络详解

    1. RNN循环神经网络 1.1 结构 循环神经网络(recurrent neural network,RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络.RNN的主 ...

  6. 3D立方体旋转动画

    在线演示 本地下载

  7. 算法(Algorithms)第4版 练习 1.3.219

    方法实现: //1.3.19 /** * remove the last node in the linked list whose first node is first * * @return r ...

  8. input标签添加上disable属性在移动端字体颜色不兼容的解决办法。

    input[disabled],input:disabled,input.disabled{ color: #999; -webkit-text-fill-color:#999; -webkit-op ...

  9. kettle监控销售人员当月每天任务完成率_20161107周一

    1.上面是目标表,其中激活客户数为当月每天之前30天未下单的客户 2.写SQL SELECT a.销售员,c.当月销售确认额,a.当月订单额,b.当月首单数,b.当月激活数, a1,b.b1,b.c1 ...

  10. BZOJ2467五角形生成树——数学

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2467 可以得出只需在每个五角形中去掉任意一条边,在某个五角形中去掉包括内边的两条边即可. 代码 ...