前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React---消息订阅发布机制

React---消息订阅发布机制

作者头像
半指温柔乐
发布于 2021-04-26 02:10:16
发布于 2021-04-26 02:10:16
79400
代码可运行
举报
文章被收录于专栏:前端知识分享前端知识分享
运行总次数:0
代码可运行

一、PubSubJS的使用

  1. 工具库: PubSubJS
  2. 下载: npm install pubsub-js --save
  3. 使用:

1) import PubSub from 'pubsub-js' //引入

2) PubSub.subscribe('delete', function(data){ }); //订阅

3) PubSub.publish('delete', data) //发布消息

二、案例

接上一篇github搜索案例改造

1. App.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 import Search from './components/Search'
 3 import List from './components/List'
 4 
 5 export default class App extends Component {
 6     render() {
 7         return (
 8             <div className="container">
 9                 <Search/>
10                 <List/>
11             </div>
12         )
13     }
14 }

2. Search.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 import PubSub from 'pubsub-js'
 3 import axios from 'axios'
 4 
 5 export default class Search extends Component {
 6 
 7     search = ()=>{
 8         //获取用户的输入(连续解构赋值+重命名)
 9         const {keyWordElement:{value:keyWord}} = this
10         //发送请求前通知List更新状态
11         PubSub.publish('msg',{isFirst:false,isLoading:true})
12         //发送网络请求
13         axios.get(`/api1/search/users?q=${keyWord}`).then(
14             response => {
15                 //请求成功后通知List更新状态
16                 PubSub.publish('msg',{isLoading:false,users:response.data.items})
17             },
18             error => {
19                 //请求失败后通知App更新状态
20                 PubSub.publish('msg',{isLoading:false,err:error.message})
21             }
22         )
23     }
24 
25     render() {
26         return (
27             <section className="jumbotron">
28                 <h3 className="jumbotron-heading">搜索github用户</h3>
29                 <div>
30                     <input ref={c => this.keyWordElement = c} type="text" placeholder="输入关键词点击搜索"/>&nbsp;
31                     <button onClick={this.search}>搜索</button>
32                 </div>
33             </section>
34         )
35     }
36 }

3. List.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 import PubSub from 'pubsub-js'
 3 import './index.css'
 4 
 5 export default class List extends Component {
 6 
 7     state = { //初始化状态
 8         users:[], //users初始值为数组
 9         isFirst:true, //是否为第一次打开页面
10         isLoading:false,//标识是否处于加载中
11         err:'',//存储请求相关的错误信息
12     } 
13 
14     componentDidMount(){
15         this.token = PubSub.subscribe('msg',(_,stateObj)=>{
16             this.setState(stateObj)
17         })
18     }
19 
20     componentWillUnmount(){
21         PubSub.unsubscribe(this.token)
22     }
23 
24     render() {
25         const {users,isFirst,isLoading,err} = this.state
26         return (
27             <div className="row">
28                 {
29                     isFirst ? <h2>欢迎使用,输入关键字,随后点击搜索</h2> :
30                     isLoading ? <h2>Loading......</h2> :
31                     err ? <h2 style={{color:'red'}}>{err}</h2> :
32                     users.map((userObj)=>{
33                         return (
34                             <div key={userObj.id} className="card">
35                                 <a rel="noreferrer" href={userObj.html_url} target="_blank">
36                                     <img alt="head_portrait" src={userObj.avatar_url} style={{width:'100px'}}/>
37                                 </a>
38                                 <p className="card-text">{userObj.login}</p>
39                             </div>
40                         )
41                     })
42                 }
43             </div>
44         )
45     }
46 }

三、扩展Fetch

1. 文档

  1. https://github.github.io/fetch/
  2. https://segmentfault.com/a/1190000003810652

2. 特点

  1. fetch: 原生函数,不再使用XmlHttpRequest对象提交ajax请求
  2. 老版本浏览器可能不支持

3. 相关API

1) GET请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 fetch(url).then(function(response) {
2     return response.json()
3   }).then(function(data) {
4     console.log(data)
5   }).catch(function(e) {
6     console.log(e)
7   });

1) POST请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 fetch(url, {
2     method: "POST",
3     body: JSON.stringify(data),
4   }).then(function(data) {
5     console.log(data)
6   }).catch(function(e) {
7     console.log(e)
8   })
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
我们学完Spring后,大都就直接接着学习之后的内容啦,但是我想偶尔回过头来看一看,才能走的更远啊。
宁在春
2022/10/31
1890
手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
Spring6-IoC(Inversion of Control)控制反转和DI(Dependency Injection)依赖注入,手动实现IOC
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的 <font color="blue">反射机制</font> 。简单来说,反射机制指的是程序在运行时能够获取自身的信息。
鱼找水需要时间
2023/06/11
2670
Spring6-IoC(Inversion of Control)控制反转和DI(Dependency Injection)依赖注入,手动实现IOC
Spring之IOC容器
spring core提供了IOC,DI,Bean配置装载创建的核心实现 核心概念: Beans、BeanFactory、BeanDefinitions、ApplicationContext
冬天vs不冷
2025/01/21
2360
Spring之IOC容器
手写IOC
咱们主要基于java中的反射,再加注解,来实现spring框架中IOC的这个效果。
叫我阿杰好了
2023/10/30
1990
手写IOC
Spring(下)
Spring 提供了以下多个注解,这些注解可以直接标注在 Java 类上,将它们定义成 Spring Bean。
用户8126523
2023/04/25
4320
手动实现Spring IOC 跟 AOP 的雏形
让我们的Java开发更加简洁、现代化、响应式编程、高性能高产、微服务。简而言之 Spring 是Java目前「第一大框架」,Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
sowhat1412
2020/11/20
4170
手动实现Spring IOC 跟 AOP 的雏形
[Spring] 如何实现一个低配版`Spring BeanFactory`?
如此一来,我们的低配版Spring BeanFactory就可以看到如下的效果了。
架构探险之道
2019/07/25
4070
3、Spring 之IOC 容器 详解
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
叫我阿杰好了
2023/10/17
7K0
3、Spring 之IOC 容器 详解
模拟Spring实现一个简易的IOC容器
在模拟实现IOC容器之前,我们必须要掌握反射相关的知识,毕竟IOC容器采用的是反射进行的查找创建。
半月无霜
2024/07/28
1440
从零手写IOC
概述 IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。 1. Component注解定义 package cn.com.infcn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; impor
java404
2018/05/18
9921
​Spring:IOC(2)
声明一个变量a,初始化为10,此时a就不代表字母a了,而是作为一个变量的名字。当我们引用a的时候,我们实际上拿到的值是10。
愷龍
2023/02/04
4860
Spring学习笔记
可以看出,UserDaoImplForMySQL中主要是连接MySQL数据库进行操作。如果更换到Oracle数据库上,则需要再提供一个UserDaoImplForOracle,如下:
捞月亮的小北
2024/04/15
2300
Spring学习笔记
2. IOC
在 Spring 框架中,IOC(Inversion of Control,控制反转)是一个重要的概念,它是框架实现松耦合的一种方式。在传统的程序设计中,应用程序会主动创建对象并管理对象之间的依赖关系。而在 IOC 的思想中,控制权的转移是由程序本身掌控的,应用程序不再直接管理对象和对象之间的依赖关系,而是交给了 Spring 容器来管理。在 Spring 中,组件的依赖关系通过配置文件或者注解来描述,Spring 容器负责实例化对象并维护对象之间的依赖关系,从而实现了对象之间的解耦。
捞月亮的小北
2023/12/01
3010
2. IOC
Spring入门这一篇就够了
前面我们在写程序的时候,都是面向接口编程,通过DaoFactroy等方法来实现松耦合
乔戈里
2019/07/25
5070
Spring IoC容器与Bean管理
从本节开始,我将要学习作为java高级阶段最最最最重要的一个框架体系,名为Spring。Spring是整个Java生态中最重要的一环。因为我也是初学,所以我的概括也不一定全面和精炼。写这一章只是为自己以后复习。
害恶细君
2022/11/22
7370
Spring IoC容器与Bean管理
聊一聊 Spring 6 容器 IOC
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
小熊学Java
2023/09/06
9900
聊一聊 Spring 6 容器 IOC
Spring的AOP与动态代理「建议收藏」
Aspect Oriented Programming(AOP) “面向切面编程”。 在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务 (例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。 主要功能 日志记录,性能统计,安全控制,事务处理,异常处理等等 通过动态代理,可以在不修改源码的前提下,实现功能的注入
全栈程序员站长
2022/08/04
6170
Spring的AOP与动态代理「建议收藏」
Spring中毒太深,离开Spring我连最基本的CRUD都不会写了...
随着 Spring 的崛起以及其功能的完善,现在可能绝大部分项目的开发都是使用 Spring(全家桶) 来进行开发,Spring也确实和其名字一样,是开发者的春天,Spring 解放了程序员的双手,而等到 SpringBoot出来之后配置文件大大减少,更是进一步解放了程序员的双手,但是也正是因为Spring家族产品的强大,使得我们习惯了面向 Spring 开发,那么假如有一天没有了 Spring,是不是感觉心里一空,可能一下子连最基本的接口都不会写了,尤其是没有接触过Servlet编程的朋友。因为加入没有了 Spring 等框架,那么我们就需要利用最原生的 Servlet 来自己实现接口路径的映射,对象也需要自己进行管理。
BinGo_Blog
2022/11/01
2540
JAVAEE框架整合技术之Spring01-IOC教程
2006年10月,发布 Spring2.0 2009年12月,发布 Spring3.0 2013年12月,发布 Spring4.0 2017年9月, 发布最新 Spring5.0 通用版(GA)
张哥编程
2024/12/13
1450
JAVAEE框架整合技术之Spring01-IOC教程
Spring概述
2006年10月,发布 Spring2.0 2009年12月,发布 Spring3.0 2013年12月,发布 Spring4.0 2017年9月, 发布最新 Spring5.0 通用版(GA)
张哥编程
2024/12/13
1660
相关推荐
手写Spring-ioc 注入 jdk反射实现 绝对满足你的好奇心哦 解决怎么我写了一个注解就可以直接注入了?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档