便于我们对context的使用。从上向下进行数据的传递。也就是再根组件上传递数据,在任意的子组件中都可以获取到根组件传递过来的数据。可以直接进行使用。useContext简化了我们使用context的过程,实际上原理还是一样的。

1、案例:从父组件向子孙组件传递数据

  1. import React, { createContext } from 'react'
  2. import ReactDOM from 'react-dom'
  3. // 使用useContext 进行状态的传递
  4. import App from './20_hooks的使用/05_useContext的使用'
  5. // 定义context以及需要传递的数据 同时进行导出 提供给其他的组件使用
  6. export const UserContext = createContext()
  7. export const ThemeContext = createContext()
  8. // 原始的渲染方法
  9. // ReactDOM.render(
  10. // <App />,
  11. // document.getElementById('root')
  12. // )
  13. // 使用context的渲染的方法 在组件中进行使用 最外层的两个context都向App组件传递数据
  14. ReactDOM.render(
  15. <UserContext.Provider value={{ name: 'coderweiwei', age: 123 }}>
  16. <ThemeContext.Provider value={{color: 'pink', fontSize: '16px' }}>
  17. <App />
  18. </ThemeContext.Provider>
  19. </UserContext.Provider>,
  20. document.getElementById('root')
  21. )

2、子组件使用父组件传递的数据

  1. import React, { useContext } from 'react'
  2. // 先引入需要传递的context 然后使用相应的context hook
  3. import { UserContext, ThemeContext } from '../index'
  4. export default function ContextHookDemo() {
  5. // 使用useContext钩子函数
  6. const user = useContext(UserContext)
  7. const theme = useContext(ThemeContext)
  8. // 在子组件中直接使用即可
  9. console.log(user, theme);
  10. return (
  11. <div>
  12. <h2>context的具体使用</h2>
  13. </div>
  14. )
  15. }
  16. # 可以封装为自定义的hook函数 提供给具体的业务组件进行使用

3、useContext的使用规则总结

  1. useContext就是用来简化我们原来使用原生的context的繁琐步骤,可以简单的将其理解为原生useContext的语法糖形式。
  2. 使用规则:在项目的根组件中创建我们需要传递的context
  3. const UserContext = createContext();
  4. const ThemeContext = createContext();
  5. 将创建的context实例映射为react组件的标签 并通过标签的形式向子孙组件传递数据。
  6. <UserContext.Provider value={{ name: "weiwei", age: 18 }}>
  7. <ThemeContext value={{ color: "red"; fontSize: "12px"; }}>
  8. // 将根组件放入 这样的话我们需要的数据就传递下去了 任意的子组件就可以获取我们的数据了
  9. <App />
  10. <ThemeContext>
  11. <UserContext.Prpvider>
  12. 在任意的组件中进行使用context
  13. import { useContext } from "react"
  14. // 引入我们需要的context
  15. import { UserContext, ThemeContext } from "./App.js"
  16. const user = useContext(UserContext);
  17. const theme = useContext(ThemeContext);
  18. // 这里就可以获取我们的数据了 可以直接使用传递的context的值了 直接可以在组件的内部进行使用
  19. console.log(usertheme