react学习之redux和redux-react用法
前言
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用法的更多相关文章
- React学习笔记-1-什么是react,react环境搭建以及第一个react实例
什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...
- React学习资料
以下是我整理的React学习资料,包括:React基础.Redux.reat-router, redux middleware, higher order components, React验证等, ...
- React学习笔记(一) 基础知识
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我. React的基 ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
- AntDesign(React)学习-1 创建环境
目录: AntDesign(React)学习-15 组件定义.connect.interface AntDesign(React)学习-14 使用UMI提供的antd模板 AntDesign(Reac ...
- React系列(一):React入门
React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据 ...
- React学习之redux
在阅读本文之前,希望大家对以下知识点能提前有所了解并且上好厕所(文章有点长): 状态提升的概念 react高阶组件(函数) es6基础 pure 组件(纯函数) Dumb 组件 React.js的co ...
- react系列(四)Redux基本概念和使用
Redux基本概念和使用 先从Flux开始 先放一个Flux官网的链接.需要fq. Flux是Facebook提出的一种构建客户端网页应用的应用架构,它是一种抽象程度很高的设计模式,鼓励单向数据流. ...
- React:快速上手(5)——掌握Redux(2)
React:快速上手(5)——掌握Redux(2) 本文部分内容参考阮一峰的Redux教程. React-Redux原理 React-Redux运行机制 我觉得这张图清楚地描述React-Redux的 ...
- React:快速上手(4)——掌握Redux(1)
React:快速上手(4)——掌握Redux 引入Redux 混乱的state管理 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状 ...
随机推荐
- 【Windows】修改远程桌面端口号
echo off echo 修改远程连接端口 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Se ...
- 使用urllib2打开网页的三种方法(Python2)
python2才有urllib2模块,python3把urllib和urllib2封装成了urllib模块 使用urllib2打开网页的三种方法 #coding:utf-8 import urllib ...
- Gemini.Workflow 双子工作流入门教程二:定义流程:流程节点介绍
简介: Gemini.Workflow 双子工作流,是一套功能强大,使用简单的工作流,简称双子流,目前配套集成在Aries框架中. 下面介绍本篇教程:流程定义:流程节点属性. 流程节点: 左侧是节点工 ...
- 怎么样写一个能告诉你npm包名字是否被占用的工具
事情是这样的: 因为我经常会写一些npm包,但是有时候我写完一个包,npm publish 的时候却被提示说包名字被占用了,要不就改名字,要不就加scope,很无奈.npm 命令行可以通过 npm v ...
- Contiki clock模块
一.functions for handling system time clock_time_t clock_time(void);//return the current system time ...
- BZOJ 1677 [Usaco2005 Jan]Sumsets 求和:dp 无限背包 / 递推【2的幂次方之和】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方 ...
- Windows内存性能分析(二)性能瓶颈
内存瓶颈: 由于可用内存缺乏导致系统性能下降的现像. (一).相关的性能对象 主要考虑内存的页面操作和磁盘的I/O操作,需要考虑如下性能对象: Memory性能对象: 用于分析整个系统的内存瓶颈问题. ...
- 引用 qsort与sort的比较
引用 linpder 的 qsort与sort的比较 在C/C++标准库中提供了快速排序的函数qsort():在STL中也提供了sort()排序函数,那么这两个函数哪个快呢?之前与代码-> ...
- __declspec(dllimport)的小秘密(转)
昨天和同事使用一个dll(lib+dll)的时候,发现他在引用头文件是,并没有使用__declspec(dllimport),但是程序完全运行正常,不明觉厉下,去网上翻了下资料,原来是链接器的原因,这 ...
- codeforces 659F F. Polycarp and Hay(并查集+bfs)
题目链接: F. Polycarp and Hay time limit per test 4 seconds memory limit per test 512 megabytes input st ...