You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.1 KiB

2 years ago
  1. import React, { createContext } from 'react'
  2. // App -> A -> C
  3. // App数据 -> C
  4. /*
  5. 1.上层组件和下层组件关系是相对的只要存在就可以使用通常都会通过 App 作为数据提供方
  6. 2.这里涉及到的语法都是固定的有两处(1)提供的位置通过 value 提供数据(2)获取的位置 { value => 使用 value 做什么都可以 } */
  7. // 1.导入 createContext 方法并执行, 解构提供者和消费者
  8. const { Provider, Consumer } = createContext()
  9. function ComA() {
  10. return (
  11. <div>
  12. this is ComA
  13. <ComC />
  14. </div>
  15. )
  16. }
  17. function ComC() {
  18. return (
  19. <div>
  20. thi is ComC,
  21. {/* 3.通过 Consumer 使用数据 */}
  22. <Consumer>{(value) => <span>{value}</span>}</Consumer>
  23. </div>
  24. )
  25. }
  26. class App extends React.Component {
  27. state = {
  28. message: 'this is message',
  29. }
  30. render() {
  31. return (
  32. // 2.使用 provider 包裹根组件
  33. <Provider value={this.state.message}>
  34. <div>
  35. <ComA />
  36. </div>
  37. </Provider>
  38. )
  39. }
  40. }
  41. export default App