zoukankan      html  css  js  c++  java
  • 非父子组件传值

    one 组件

    import React, { Component } from 'react'
    import PubSub from 'pubsub-js'
    
    export default class One extends Component {
        render() {
            let cities = [
                {id: 1, name: '深圳'},
                {id: 2, name: '上海'},
                {id: 3, name: '武汉'},
                {id: 4, name: '杭州'}
            ]
            return (
                <div className="one">
                    <h1>one组件</h1>
                    <ul>
                    {
                        cities.map(item=>{
                            return <li key={item.id} onClick={()=>this.selectCityAction(item.name)}>{item.name}</li>
                        })
                    }
                    </ul>
                </div>
            )
        }
    
        selectCityAction = (cityName)=>{
            console.log(cityName);
            // 执行发布
            PubSub.publish('select-city', cityName);
        }
    }

    two组件

    import React, { Component } from 'react'
    import PubSub from 'pubsub-js'
    
    export default class Two extends Component {
        state = {
            oneData: null
        }
        render() {
            return (
                <div className="two">
                    <h1>two组件</h1>
                    <p>接收到的数据为:{this.state.oneData}</p>
                </div>
            )
        }
    
        componentDidMount(){
            // 监听
            this.token = PubSub.subscribe('select-city', (msg, data)=>{
                this.setState({oneData: data});
                console.log(data);
            });
        }
    
        componentWillUnmount(){
            // 移除监听
            PubSub.unsubscribe(this.token);
        }
    }

    App组件

    import React, { Component } from 'react';
    import One from './components/one'
    import Two from './components/two'
    import './style.css'
    
    class App extends Component {
        state = {
            isShow: true
        }
        render() {
            return (
                <div className="App">
                    <One/>
                    <input type="checkbox" checked={this.state.isShow} onChange={(ev)=>{
                        this.setState({isShow: ev.target.checked});
                    }}/>
                    {this.state.isShow && <Two/>}
                </div>
            );
        }
    }
    
    export default App;

    style样式

    .App{
        padding: 20px;
        background: lavender;
    }
    .one{
        padding: 50px;
        background: lightblue;
    }
    .two{
        padding: 50px;
        background: lightcoral;
    }
  • 相关阅读:
    jQuery文件上传插件Uploadify(转)
    最简单易懂的SpringCloudSleuth教程
    微信协议简单调研笔记
    Base64 image
    javascript身份证号码验证
    基于微信的产品设计01:注册登录及账号体系设计
    android端 socket长连接 架构
    win7管理工具不可用
    http和socket之长连接和短连接区别
    Socket 长连接与短连接,心跳
  • 原文地址:https://www.cnblogs.com/r-mp/p/11218117.html
Copyright © 2011-2022 走看看