react使用pubsub事件订阅,组件间通信

1、PubSub使用方式

1.1 react导入库

npm install pubsub-js --save

1.2 react 页面引入pubsubjs

import PubSub from ‘pubsub-js‘

1.3 pubsubjs使用

发送消息:PubSub.publish(名称,参数)

订阅消息:PubSub.subscrib(名称,函数)

取消订阅:PubSub.unsubscrib(名称)

PS:pubsubjs源码及使用详情https://github.com/mroderick/PubSubJS

2、React实例使用监听实现传参

2.1 子页面home.js使用PubSub.publish发送state

[javascript] view plain copy

  1. import React, { Component } from ‘react‘;
  2. import PubSub from ‘pubsub-js‘;
  3. class Home extends Component {
  4. constructor(props){
  5. super(props);
  6. this.state={
  7. increase:‘increase‘,
  8. decrease:‘decrease‘
  9. }
  10. }
  11. buttonIncrease(){
  12. PubSub.publish(‘PubSubmessag‘,this.state.increase);
  13. }
  14. buttonDecrease(){
  15. PubSub.publish(‘PubSubmessage‘, this.state.decrease);
  16. }
  17. render() {
  18. return (
  19. <div>
  20. Some state changes:
  21. <button onClick={this.buttonIncrease.bind(this)}>Increase</button>
  22. <button onClick={this.buttonDecrease.bind(this)}>Decrease</button>
  23. </div>
  24. )
  25. }
  26. }
  27. export default Home;

2.2 父页面App.js接收使用PubSub.subscribe订阅指定消息,PubSub.unsubscribe取消订阅消息

[javascript] view plain copy

  1. import React, { Component } from ‘react‘;
  2. import { Link} from ‘react-router-dom‘;
  3. import PubSub from ‘pubsub-js‘;
  4. export default class App extends Component{
  5. constructor(props){
  6. super(props);
  7. this.state={
  8. increase:‘none‘,
  9. }
  10. }
  11. componentDidMount(){
  12. this.pubsub_token = PubSub.subscribe(‘PubSubmessage‘, function (topic,message) {
  13. this.setState({
  14. increase: message
  15. });
  16. }.bind(this));
  17. }
  18. componentWillUnmount(){
  19. PubSub.unsubscribe(this.pubsub_token);
  20. }
  21. render() {
  22. return (
  23. <div>
  24. <header>
  25. Links:
  26. <Link to="/App/home">Home</Link>
  27. </header>
  28. <div style={{ marginTop: ‘1.5em‘ }}>{ this.props.children}</div>
  29. <div style={{ marginTop: ‘1.5em‘ }}>{ this.state.increase}</div>
  30. </div>
  31. )
  32. }
  33. }

当在子页面单击increase、decrease按钮,会发送不同的消息给父页面,父页面收到消息,利用this.state.increase进行呈现,此时你会发现它是实时变化的,因为它会实时监听子组件发送的消息。

PS:React-Router4.0建立子父组件关系

子父组件关系建立是依靠React-Router4.0来建立的,附上子父组件关系的源码,若对RR4.0不太了解,可参考http://blog.csdn.net/zfan520/article/details/78563034

[javascript] view plain copy

  1. import React, { Component } from ‘react‘;
  2. import {BrowserRouter } from ‘react-router-dom‘;
  3. import { Router, Route, } from ‘react-router‘
  4. import  App from ‘../components/App.js‘
  5. import  Home from ‘../components/Home.js‘
  6. export default class RouterIndex extends Component {
  7. render() {
  8. return (
  9. <BrowserRouter>
  10. <App path="/App" component={App}>
  11. <Route path="/App/home" component={Home} />
  12. </App>
  13. </BrowserRouter>
  14. )
  15. }
  16. }

原文地址:https://www.cnblogs.com/lcosima/p/8626491.html

时间: 2024-08-30 13:24:01

react使用pubsub事件订阅,组件间通信的相关文章

vue 和 react 组件间通信方法对比

vue 和 react 组件间通信方法对比 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).this.$refs.this.$children props 子组件 => 父组件 自定义事件($emit.$on)(推荐).this.$parent 回调函数(推荐) 非父子组件(兄弟组件.跨级组件) bus 高阶组件(推荐).自定义事件.context 原文地址:https://www.cnblogs.com/cag2050/p/9054840.html

React 中组件间通信的几种方式

在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通信父组件通过向子组件传递 props,子组件得到 props 后进行相应的处理.演示代码:父组件 parent.js: import React,{ Component } from "react"; export default class App extends Component{

React独立组件间通信联动

React是现在主流的高效的前端框架,其官方文档 http://reactjs.cn/react/docs/getting-started.html 在介绍组件间通信时只给出了父子组件间通信的方法,而没有给出独立组件间通信的解决方案.这里我介绍一种不错的实现方式——signals. 第一步,我们要建立两个简单的react组件——一个进度条和一个输入框. 组件——进度条: var ProcessBar=React.createClass({ getInitialState:function(){

Android组件间通信框架EventBus

事件总线EventBus模式概述 在不使用事件总线的情况下: 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容.这种场景常见的解决方式就是定义一个接口,需要关注该事件的控件来实现这个接口.然后事件触发的地方来注册/取消注册这些对该事件感兴趣的控件.例如,陌陌依赖手机位置信息来获取附近的用户,所以在位置更新管理器(MmLocationManager)中定义了一个接口来监听位置更新的事件(MmLocationListener): interface MmLocationListene

Android 组件间通信--事件驱动

在android中,组件间通信常用的方式: 1.使用广播机制:在主页面中监听特定的广播事件,进行业务逻辑的操作,其他页面只需要根据需求发送广播即可 例如:常用app结构中,左边通常为菜单栏,点击菜单栏,中间页面变化.当点击菜单时发送广播通知容器变化显示的Fragment 2.使用接口方式:activity实现特定的接口,在子类或者Fragment中获取到Activity对象,转换成特定的接口对象,调用接口方法 3.事件驱动方式:EventManager 最近在网上看到EventBus这个开源的工

vue组件间通信六种方式(完整版)

vue组件间通信六种方式(完整版) 前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 如上图所示,A 和 B.B 和 C.B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代). 针对不同的使用场景,如何选择行之有效的通信方式?这是我们所要探讨的主题.本文总结了vue组件间通信的几种方式,如props.$emit/$on.vuex.$parent / $chil

Android组件间通信——EventBus

在Android开发中,组件间通信一直是一个不可忽视的部分.当然,组件之间的通信有很多种方式可以选择,本文就利用EventBus通信的方式进行论述. EventBus是一个第三方框架,它的简单使用分为如下几步: 1. 下载框架源码,并导入工程中. 下载地址:https://github.com/greenrobot/EventBus 如果需要看如何导入并依赖工程,请转到另一篇博文:<Eclipse导入所依赖的Android项目> 2. 定义事件类,并广播事件 例如下面这个自定义事件类Messa

Vue2.0 实战项目(五) 组件间通信的方法

Vue组件之间通信分为三种情况:父组件向子组件通信.子组件向父组件通信.兄弟组件间通信. 一.父组件向子组件通信 通过props可以将值传递给子组件 <!-- 父组件 --><template> <div id="app"> <!-- 父子组件间通信 --> <child :message="toChildMsg"></child> </div> </template>

vue组件间通信子与父

二.组件间通信(子组件传值给父组件) 通过事件的方式来完成数据的传输. ①在父组件中 定义一个方法,用来接收子组件所通过事件传来的值 methods:{ recvMsg:function(msg){ //参数msg就是子组件通过事件出来的数据 }} ②绑定事件处理函数事件一般情况 都是自定义事件 <child-component @myEvent="recvMsg"></child-component> ③在子组件触发事件 事件名,值this.$emit('my