context使用(组件通信方式之一)

context 通过组件树进行数据传递的方式。
优点:跨级组件不需要一级一级的传递props,比如孙组件可以直接访问到祖组件的数据。
缺点:

旧版使用方式(16.x以下版本)

// 一、父级组件
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import RouterCom from './router';
import '../assets/css/App.css';

class App extends Component {
	/*
	1、使用静态方法childContextTypes定义context对象属性
	2、父组件中提供状态管理数据
	3、通过getChildContext来返回context对象
	*/
	// 1.1、有状态子组件
	static childContextTypes = {
		globalMsg : PropTypes.object
	}
	// 2.1、
	state = {
		globalMsg : {}
	}
	// 3.1、
	getChildContext () {
		return {globalMsg: this.state.globalMsg}
	}
  	render() {
    	return (
      		<div className="App"><RouterCom /></div>
    	);
  	}
}
// 1.2、针对为状态子组件不可使用静态方法
/* App.childContextTypes = {
  globalMsg: PropTypes.string    
} */
export default App;
// 二、子组件/孙组件
import React, { Component } from 'react';
import PropTypes from 'prop-types';

class Login extends Component {
	// 1、声明需要使用的context对象的属性。若没有声明,取到的值为undefine。
	static contextTypes = {
		globalMsg: PropTypes.object
	}
	constructor (context) {
		super();
	}
	render () {
		return (
			<div>拿到的曾组件context属性a的值为:{this.context.globalMsg.a}</div>
		)
	}
}
export default Login;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值