针对兄弟节点信息互通的方案
采取一个插件
pubsub-js
安装
npm i pubsub-js
使用过程
import React from 'react' import Search from './components/Search' import List from './components/List' export default class App extends React.Component { render() { return () } }
export default class List extends Component { state = { users: [], isFirst: true,//是否为第一次打开页面, isLoading: false,//表示是否处于加载 err: ''//存储请求相关错误信息 } componentDidMount() { this.token = Pubsub.subscribe('atguigu', (msg, stateObj) => { this.setState(stateObj) }) } componentWillUnmount() { Pubsub.unsubscribe(this.token) } render() { const { users, isFirst, isLoading, err } = this.state return ({ isFirst ?) } }欢迎使用,请输入关键字进行搜索
: isLoading ?Loading........
: err ?{err}
: users.map((userObj) => { return ( ) }) }
export default class Search extends Component { search = () => { //读取用户的输入 const { keyWordElement: { value: keyword } } = this // this.props.updateState({ // isFirst: false, // isLoading: true // }) Pubsub.publish('atguigu', { isFirst: false, isLoading: true }) axios.get('http://localhost:3000/api1/search/users?q=' + keyword).then( res => { // this.props.updateState({ // isLoading: false, // users: res.data.items, // }) Pubsub.publish('atguigu', { isLoading: false, users: res.data.items, }) }, err => { // this.props.updateState({ // isLoading: false, // err: err.message // }) Pubsub.publish('atguigu', { isLoading: false, err: err.message }) } ) } render() { return () } } Search Github Users
this.keyWordElement = c} type="text" placeholder="输入关键词点击输入" />
通过订阅与发布即可实现兄弟节点的信息互传,具体介绍查阅相关文档https://github.com/mroderick/PubSubJS