React生命周期第二个demo演示了兄弟组件的通信,需要通过父组件,比较麻烦;下面介绍sub/pub机制来事项组件间通信。

项目结构:

1、导包

npm i pubsub-js

2、UserSearch.jsx

import React from 'react'
import PubSub from 'pubsub-js' export default class UserSearch extends React.Component {
state = {
keyword: ''
} render() {
const { keyword, userList } = this.state
return (
<div>
<h3>搜索用户</h3>
<input type="text" placeholder="请输入搜索关键字" name="keyword" value={keyword} onChange={(e) => this.keywordInputOnChangeHandler(e)} />
<input type="button" value="开始搜索" onClick={() => this.searchClickHandler()} />
</div>
)
} keywordInputOnChangeHandler = (e) => {
const keyword = e.target.value
this.setState({ keyword })
} searchClickHandler = () => {
const { keyword } = this.state
console.log(`keyword.trim()=${keyword.trim()}`)
if (!keyword.trim()) return // publish a topic asynchronously
PubSub.publish('search', keyword);
}
}

3、UserList.jsx

import React from 'react'
import PubSub from 'pubsub-js'
import Axios from 'axios' export default class UserList extends React.Component {
state = {
userList: []
} componentDidMount() {
var mySubscriber = (msg, data) => {
console.log(msg, data);
console.log(`订阅search,接收到消息:${data}`)
this.doSearch(data)
}; console.log('UserList组件钩子函数componentDidMount。。。');
PubSub.subscribe('search', mySubscriber)
} doSearch = (keyword) => {
Axios.get(`http://localhost:4000/react-db-crud/user/search?keyword=${keyword}`)
.then(res => {
if (res.data.code == 0) {
const userList = res.data.data
console.log(`userList=${JSON.stringify(userList)}`)
this.setState({ userList })
}
})
} render() {
return (
<div>
{
this.state.userList.map(user => <p>{user.id + "--" + user.name + "--" + user.age}</p>)
}
</div>
)
}
}

最新文章

  1. required - HTML5里的input标签的required属性提示文字修改
  2. ImportError: The _imagingft C module is not installed
  3. cell重用的几种方式
  4. 多线程 GET
  5. GoogleApis 屏蔽
  6. AWVS漏洞测试-02节-添加一个简单的新闻系统
  7. Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}
  8. 用普通IO驱动LCD的控制方法-松瀚汇编源程序
  9. HaProxy+keepalived实现负载均衡
  10. JS采用ActiveXObject实现用户在提交表单时屏蔽敏感词的功能
  11. python实现简单的循环购物车小功能
  12. TCP/IP、Http、Socket的区别与关系
  13. .NetCore获取Json和Xml格式的配置信息
  14. 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)
  15. Android利用RecyclerView实现列表倒计时效果
  16. 9-8-B树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
  17. 45.纯 CSS 创作一个菱形 loader 动画
  18. 01-01java概述 doc命令、jdk\jre下载安装、path、classpath配置、开发中常见小问题
  19. 关于UltraWinGrid选中行只读设置
  20. Tmux教程

热门文章

  1. MyBatis配置文件中的标签mappers的子标签mapper的url属性
  2. Python爬虫详解
  3. LeetCode 328——奇偶链表(JAVA)
  4. C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
  5. 【思维】Kenken Race
  6. IntelliJ IDEA 统一设置编码为utf-8编码
  7. [Tarjan系列] Tarjan算法求无向图的双连通分量
  8. AngularJS-02 数据绑定和表达式
  9. C# WebForm 屏蔽输入框的验证
  10. ScrumBasic开发记录