也可直接阅读官方文档 https://reactjs.org/docs/context.html

旧版本使用方式 getChildContext

  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import './App.css';
  4. class Child extends React.Component{
  5. static contextTypes = {
  6. a: PropTypes.number
  7. }
  8. render(){
  9. console.log(this.context,'Child')
  10. return <div />
  11. }
  12. }
  13. // props: color : stirng
  14. export default class App extends React.Component{
  15. static childContextTypes= {
  16. a: PropTypes.number
  17. }
  18. getChildContext(){
  19. return {
  20. a:1
  21. }
  22. }
  23. render(){
  24. return (
  25. <div>
  26. <Child />
  27. </div>
  28. )
  29. }
  30. }

不再建议这样使用,react17版本会正式弃用这种使用方式。

新版使用方式 CreateContext

  1. import React, { createContext } from 'react';
  2. import './App.css';
  3. export const myContext = createContext({
  4. a:2
  5. });
  6. class Child extends React.Component{
  7. static contextType = myContext
  8. render(){
  9. console.log(this,'Child')
  10. return <div> {this.context?.a} <div>
  11. }
  12. }
  13. class App extends React.Component{
  14. render(){
  15. return (
  16. // 如果打开下面的注释,那么Child中的this.context取值为 {a:4},即Provider的value值
  17. // 现在取的是默认值,即 {a: 2}
  18. // <myContext.Provider value={{a:4}}>
  19. <Child />
  20. // </myContext.Provider>
  21. )
  22. }
  23. }
  24. export default App;

注意,允许创建多个context,具体组件中的 this.context 由 static contextType 决定。
需要更新context的话,直接用 的形式去更新value值即可。

Context

使用hooks