父组件向子组件通信
父组件向子组件传递props
子组件向父组件通信
父组件向子组件通过props传递回调函数,子组件在特定时间执行回调函数把数据传给父组件
跨级组件之间通信
跨级组件通信就是指父组件向子组件的子组件通信,方法有两个
- 通过中间组件层层传递props
- 使用context对象
第一种方式如果组件嵌套层次深,那么层层传递props的方法使得代码变得复杂,并且这些props不是中间组件所需要的
使用context要满足两个条件:
- 上级组件要自己声明支持context,并且使用一个方法返回context
- 子组件要声明自己使用context
App组件
import React, { Component } from 'react';import PropTypes from "prop-types";import Sub from "./Sub";export default class App extends Component{// 父组件声明自己支持 contextstatic childContextTypes = {value:PropTypes.string,callback:PropTypes.func,}state = {value: "wstreet"}// 父组件提供一个函数,用来返回相应的 context 对象getChildContext = () => {return{value: this.state.value,callback: this.callback}}callback = (msg) => {console.log(msg)}render(){return(<div><Other><Sub /></Other></div>);}}
Sub组件
import React,{ Component } from "react";import PropTypes from "prop-types";export default class Sub extends Component{// 子组件声明自己需要使用 contextstatic contextTypes = {value: PropTypes.string,callback: PropTypes.func,}onClick = () => {const { callback, value } = this.contextcallback(`${value}回来了`)}render(){const { value } = this.contextreturn(<div>{value}<button onClick = { this.onClick }>点击我</button></div>);}}
非嵌套组件通信
- 利用二者共同父组件的 context 对象进行通信
- 使用自定义事件机制的方式
全局状态管理工具
Redux
