美文网首页
react 组件通信方式集合

react 组件通信方式集合

作者: 木中木 | 来源:发表于2019-11-03 20:04 被阅读0次
  1. 通过props进行父组件 -> 子组件,子组件 ->父组件
export default class  Communicate extends Component{
    constructor() {
        super();
        this.values = ['linjian', 'linjian1', 'linjian2'];
        this.handleChange = this.handleChange.bind(this);
    }

    handleChange() {
        console.log('you click me');
    }

    render() {
        return <>
            <ListOne values = {this.values} handleChange = {this.handleChange} />
        </>
    }

}

class ListOne extends Component {
    render() {
        const {values} = this.props;
        const content = values.map((item) =>{
            return <li>{item}</li>
        })
        return <ul onClick = {this.props.handleChange}>
            {content}
        </ul>
    }
}

  1. 通过context来完成跨级组件传输,这种方式官方不建议,对于构建大型组件,context很难弄明白来自于哪里
class List extends Component {
    static childContextTypes = {
        color: checkPropTypes.func,
        backgroundColor: checkPropTypes.string,
    }

    getChildContext() {
        return {
            backgroundColor: 'blue',
            color: () => 'red',
        }
    }

    render(){
        return <ul>
            <SumItem></SumItem>
        </ul>      
    }
}

class SumItem extends Component {
    static contextTypes  = {
        backgroundColor: checkPropTypes.string,
    }
    render() {
        return <li style={{background: this.context.backgroundColor}}>
            <TextItem/>
        </li>   
    }
}

class TextItem extends Component {
    static contextTypes  = {
        color: checkPropTypes.func,
    }
    render() {
        return <label style={{color: this.context.color()}}>test</label>   
    }
}
  1. 通过发布/订阅模式来举例,EventEmitter,这种方式和reactNative中提供通信一样
export default class  Communicate extends Component{
    constructor() {
        super();
        this.values = ['linjian', 'linjian1', 'linjian2'];
        this.handleChange = this.handleChange.bind(this);
    }

    handleChange() {
        console.log('you click me');
    }

    componentDidMount() {
        this.itemClick = emitter.on('itemClick', (data) => {
            console.log(data);
        })
    }

    componentWillUnmount() {
        emitter.removeListener(this.itemClick);
    }

    render() {
        return <>
            <ListOne values = {this.values} handleChange = {this.handleChange} />
            <List/>
        </>
    }

}

class SumItem extends Component {
    static contextTypes  = {
        backgroundColor: checkPropTypes.string,
    }
    render() {
        return <li style={{background: this.context.backgroundColor}} onClick = {()=> emitter.emit('itemClick', 'test')}>
            <TextItem/>
        </li>   
    }
}

相关文章

  • react 组件通信方式集合

    通过props进行父组件 -> 子组件,子组件 ->父组件 通过context来完成跨级组件传输,这种方式官方不建...

  • React Native 的组件通信方式

    React Native 的组件通信方式 React Native 的...

  • 总结

    React组件之间的通信方式 1.父组件向子组件通信 React数据流动是单向的,通过props传递 2.子组件向...

  • 干货博客集

    基础 webpack4.x 入门一篇足矣 react组件通信方式汇总 vue组件之间的通信 原生小程序组件通信 w...

  • 07-02-React 类组件

    目标 掌握类组件的定义和使用; 掌握 React 组件间通信的方式; 掌握类组件的生命周期。 内容 在 React...

  • 03-react-跨组件级通信Context

    react-跨组件级通信- Context 之前编写组件都是通过props或者state的方式来传递组件, 但组件...

  • React组件通信的几种方式--TypeScript

    React组件通信的几种方式--TypeScript 通过todoList示例进行学习,首先创建基于TypeScr...

  • React组件间通信

    不借助redux等状态管理工具的React组件间的通信解决方法 组件通信分类 React组件间通信分为2大类,3种...

  • react native组件通信方式

    1:父组件给子组件通过props2: 通过回调父组件传递一个函数 子组件将执行结果回传给父组件3:通过ref方...

  • React Native 架构之 Redux介绍

    React 在 React 中,UI 以组件的形式来搭建,组件之间可以嵌套组合。另,React 中组件间通信的数据...

网友评论

      本文标题:react 组件通信方式集合

      本文链接:https://www.haomeiwen.com/subject/sphlbctx.html