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