redux搭配react-redux进行跨组件通信开发
| Redux | API | 作用 |
|---|---|---|
| createStore | 用于创建一个store对象 | |
| bindActionCreators | 用于简化操作,不用开发者手动触发dispatch |
| React-redux | API | 作用 |
|---|---|---|
| Provider | Provider用于包裹根组件,使所有被包裹的组件都能通过connect访问store,以便进行跨组件通信 | |
| Connect | Connect用于连接react和store中的数据,在被Provider包裹的组件中,通过connect方法可以将store中的数据映射到组件的props中 |
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from '../src/Components/counter';
import { createStore } from 'redux'
import { Provider } from 'react-redux';
const initialState = {
count: 0
}
function reducer (state = initialState, action) {
switch (action.type) {
case 'increment':
return {
count: state.count + 1
}
case 'decrement':
return {
count: state.count - 1
}
default:
return state
}
}
const store = createStore(reducer)
ReactDOM.render(
<Provider store = { store }>
<Counter />
</Provider>,
document.getElementById('root')
);
Counter.js
import React from 'react';
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import * as actionCreators from './actionCreators'
function Counter ({count, increment, decrement}) {
console.log('increment', increment)
return (
<div>
<button type="button" onClick={increment} >+</button>
<span>{count}</span>
<button type="button" onClick={decrement} >-</button>
</div>
)
}
// 1. connect 方法会帮助我们订阅store,当store中的黄台发生更改的时候,会帮助我们重新渲染组件
// 2. connect 方法可以让我们获取store中的状态,将状态通过组件的props属性映射给组件
// 3. connect 方法可以让我们获取 dispatch 方法
// 这里的state就是store存储的数据, mapStateToProps返回对象
const mapStateToProps = state => ({
count: state.count
})
// mapDispatchToProps返回对象, 返回的对象会被映射到props中
// const mapDispatchToProps = dispatch => ({
// increment () {
// dispatch({type: 'increment'})
// },
// decrement () {
// dispatch({type: 'decrement'})
// }
// })
// 对于mapDispatchToProps以上的写法可以进一步简化操作,这里我们可以用redux的bindActioCreators方法
/*
个人理解: 以前时通过dispatch去触发每个action,现在通过bindActionCreators方法,
将我们需要触发的action放在单独的文件处理,
*/
const mapDispatchToProps = dispatch => bindActionCreators(actionCreators,dispatch)
export default connect(mapStateToProps, mapDispatchToProps)(Counter);
actionCreators.js
export const increment = () => ({type: 'increment'})
export const decrement = () => ({type: 'decrement'})
redux搭配react-redux进行跨组件通信开发的更多相关文章
- Regular进阶: 跨组件通信
本文由作者郑海波授权网易云社区发布. 背景 在组件化不断深入的大环境下,无论使用哪种 MDV 框架都最终会遇到一个头疼的问题,就是「跨组件通信」. 下图是个简单的例子 这里包含「事件通信」和「数据通信 ...
- React:快速上手(2)——组件通信
React:快速上手(2)——组件通信 向父组件传递数据 父组件可以通过设置子组件的props属性进行向子组件传值,同时也可以传递一个回调函数,来获取到子组件内部的数据. 效果演示 子组件是输入框,父 ...
- 【JAVASCRIPT】React学习- 数据流(组件通信)
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...
- react复习总结(2)--react生命周期和组件通信
这是react项目复习总结第二讲, 第一讲:https://www.cnblogs.com/wuhairui/p/10367620.html 首先我们来学习下react的生命周期(钩子)函数. 什么是 ...
- vue跨组件通信的几种方法
http://www.tuicool.com/articles/jyM32mA 在开发组件的时候,一定会遇到组件的通信,比如点击一个图标出现弹窗和蒙层,这三个分别是不同的组件.管理他们之间的状态就成了 ...
- react 前端项目技术选型、开发工具、周边生态
react 前端项目技术选型.开发工具.周边生态 声明:这不是一篇介绍 React 基础知识的文章,需要熟悉 React 相关知识 主架构:react, react-router, redux, re ...
- react第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参)
第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参) #课程目标 1.梳理react组件之间的关系 2.掌握父子传值的方法 3.掌握子父传值的方法 ...
- 37行代码构建无状态组件通信工具-让恼人的Vuex和Redux滚蛋吧!
状态管理的现状 很多前端开发者认为,Vuex和Redux是用来解决组件间状态通信问题的,所以大部分人仅仅是用于达到状态共享的目的.但是通常Redux是用于解决工程性问题的,用于分离业务与视图,让结构更 ...
- react/redux组件库、模板、学习教程
开源的有蚂蚁金服的: 1.https://pro.ant.design/index-cn 2.https://pro.ant.design/docs/getting-started-cn 3.http ...
随机推荐
- JAVA垃圾回收分代处理思想
原文链接:http://www.cnblogs.com/laoyangHJ/archive/2011/08/17/JVM.html JVM分代垃圾回收策略的基础概念 JVM分代垃圾回收策略的基础概念 ...
- Spring Data JPA:解析JpaSpecificationExecutor & Specification
源码 在前面关于SimpleJpaRepository的文章[地址]中可以得知,SimpleJpaRepository间接实现了JpaSpecificationExecutor接口,本文就详细探究一下 ...
- go协程调度
目录 前言 1. 线程池的缺陷 2.Goroutine 调度器 3.调度策略 3.1 队列轮转 3.2 系统调用 3.3 工作量窃取 4.GOMAXPROCS设置对性能的影响 参考 前言 Gorout ...
- ubuntu 设置简单密码
ubuntu自带的修改密码界面要求比较长.比较复杂的密码.但通过命令行可以不受此限制. 用如下命令,按提示输入密码即可. sudo passwd username
- Qt5之事件学习总结
首先要明白一个概念,事件和信号并不一样,比如单击一下鼠标,就会产生鼠标事件(QMouseEvent),是对这个动作的描述,而因为按钮被按下了,按钮会发出clicked()的单击信号(是按钮控件产生的) ...
- 1.深入TiDB:初见TiDB
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/584 本篇文章应该是我研究的 TiDB 的第一篇文章,主要是介绍整个 ...
- python爬区csdn文章信息(原始稿)
使用python对csdn的博主文章进行爬取,期间又遇到了新的问题和旧的已经遇到过的问题.首先做一个笔记,免得以后遇到同样的问题时还得浪费时间和经历. 刚开始目的没那么明确,主要在于熟悉相关的规则及流 ...
- Kubernetes-Pod介绍(二)-生命周期
前言 本篇是Kubernetes第五篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...
- AspectJWeaver文件写入gadget详解和两种应用场景举例
目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...
- Docker安装mysql镜像并进行主从配置
Docker安装mysql镜像并进行主从配置 1.下载需要的mysql版本镜像 docker pull mysql:5.6 2.启动mysql服务实例(基本启动) #启动主mysql docker r ...