react组件通信

react组件间的通信包含以下几种形式:

1、父组件向子组件通信
2、子组件向父组件通信
3、跨级组件通信
4、非嵌套关系组件间的通信

父组件向子组件通信

父组件通过props向子组件传递需要的信息

// 子组件
const Child = (props) => {
	return <div>{props.name}</div>
}
// 父组件
const Parent = () => {
	return <Child name="react传值" />
}
子组件向父组件通信

子组件通过props+回调的方式向父组件传值

// 子组件
class Child extends React.Component {
	render() {
		return <button onClick={() => {
		this.props.callBack('子组件的值')}}>传值</button>
	}
}
// 父组件
class Parent extends React.Component {
	callBack = (value) => {
		console.log(value)
	}
	render() {
		return <Child callBack={this.callBack} />
	}
}
跨级组件通信

父组件向子组件的子组件通信,向更深层子组件通信
1、props (不推荐使用) 利用中间组件层层传递,会增加复杂度。
2、使用context (推荐使用) context相当于一个容器,把通信的数据存放在这个容器中,不管嵌套多深组件都可以随意取用。
1、Context 能让你将这些数据向组件树下所有的组件进行“广播”,所有的组件都能访问到这些数据,也能访问到后续的数据更新。
2、Context 主要应用场景在于很多不同层级的组件需要访问同样一些的数据。

const ThemeContext = React.createContext()
// 子组件的子组件
class GrandChild extends React.Component {
	render(
		return (
			<ThemeContext.Consumer>
			{
				(color) => <h1>themeColor: {color}</h1>
			}
			</ThemeContext.Consumer>
		)
	)
}
// 子组件
const Child = () => {
	return (
		<GrandChild />
	)
}
// 父组件
class Parent extends React.Component {
	render () {
		const color = 'red'
		return (
			<ThemeContext.Provider value={color}>
				<Child />
			</ThemeContext.Provider>
		)
	}
}

3、组合组件
如果你只是想避免层层传递一些属性,组件组合有时候是一个比 context 更好的解决方案。

非嵌套关系组件间的通信

包含兄弟组件和不在同一个父级中的非兄弟组件。
1、通过redux进行全局状态管理
2、如果是兄弟组件,可以找到这两个兄弟节点的共同父级节点,结合父子间通信方式进行通信。
3、通过自定义事件通信(发布订阅模式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值