前言
刚入门React可能会因为React的单向数据流的特性而遇到组件间沟通的麻烦,下面这篇文章就来给大家详细介绍下,在开始之前先来看一张图:
react组件通信
- 需要组件之进行通信的几种情况
- 父组件向子组件通信
- 子组件向父组件通信
- 跨级组件通信
- 没有嵌套关系组件之间的通信
1. 父组件向子组件通信
React数据流动是单向的,父组件向子组件通信也是最常见的;父组件通过props向子组件传递需要的信息
Child.jsx
import React from 'react'; import PropTypes from 'prop-types'; export default function Child({ name }) { return <h1>Hello, {name}</h1>; } Child.propTypes = { name: PropTypes.string.isRequired, };
Parent.jsx
import React, { Component } from 'react'; import Child from './Child'; class Parent extends Component { render() { return ( <div> <Child name="Sara" /> </div> ); } } export default Parent;
2. 子组件向父组件通信
- 利用回调函数
- 利用自定义事件机制
回调函数
实现在子组件中点击隐藏组件按钮可以将自身隐藏的功能
List3.jsx
import React, { Component } from 'react'; import PropTypes from 'prop-types'; class List3 extends Component { static propTypes = { hideConponent: PropTypes.func.isRequired, } render() { return ( <div> 哈哈,我是List3 <button onClick={this.props.hideConponent}>隐藏List3组件</button> </div> ); } } export default List3;
App,jsx
import React, { Component } from 'react'; import List3 from './components/List3'; export default class App extends Component { constructor(...args) { super(...args); this.state = { isShowList3: false, }; } showConponent = () => { this.setState({ isShowList3: true, }); } hideConponent = () => { this.setState({ isShowList3: false, }); } render() { return ( <div> <button onClick={this.showConponent}>显示Lists组件</button> { this.state.isShowList3 ? <List3 hideConponent={this.hideConponent} /> : null } </div> ); } }
观察一下实现方法,可以发现它与传统回调函数的实现方法一样.而且setState一般与回调函数均会成对出现,因为回调函数即是转换内部状态是的函数传统;