1. 前言
- react中
hook
也挺多的,有些简单有些复杂,这里说个useContext
2. 是什么 what
- React 提供的一个钩子函数,用于在函数式组件中访问上下文(Context)的值。
- 上下文(Context)是 React 中一种跨组件层级共享数据的机制,它能够在组件树中传递数据,而不必通过显式的 props 传递。useContext 的作用就是在函数式组件中访问这些共享的上下文数据。
useContext
提供了一种简洁的方式在函数式组件
中访问上下文数据,适用于需要在组件之间共享数据
的场景。
3. 应用场景
- 主题切换:通过上下文传递当前的主题样式,不同组件可以根据主题样式进行样式的切换。
- 用户认证:通过上下文传递用户认证状态,不同组件可以根据用户的认证状态来展示不同的内容。
- 国际化:通过上下文传递当前的语言环境,不同组件可以根据语言环境展示对应的翻译文本。
- 全局数据共享:通过上下文传递全局的数据,例如应用的配置信息、共享的数据状态等。
4. 环境安装
- 创建context
- 设置
provider
并通过value接口传递state- 局部组件获取读写接口
import React, { createContext, useContext } from 'react'; // 创建一个上下文 const MyContext = createContext(); // 父组件 const ParentComponent = () => { const name = 'John'; return ( <MyContext.Provider value={name}> <ChildComponent /> </MyContext.Provider> ); }; // 子组件 const ChildComponent = () => { // 使用 useContext 获取上下文的值 const name = useContext(MyContext); return <h1>Hello, {name}!</h1>; }; // 渲染应用 const App = () => { return <ParentComponent />; }; export default App;
- 通过
createContext
创建了一个名为MyContext
的上下文对象。- 然后,在父组件
ParentComponent
中,我们将需要共享的数据name
通过 MyContext.Provider 提供给子组件
。- 接下来,在子组件
ChildComponent
中,我们使用useContext
钩子来获取上下文中的值,并将其渲染到页面上。
- 为了使子组件能够访问到上下文,必须将其包裹在提供上下文值的父组件的 MyContext.Provider 组件内部。
- 在实际应用中,可以将需要共享的数据和功能
封装
到一个上下文对象
中,- 然后在需要访问这些数据和功能的组件中使用
useContext
钩子来获取上下文的值。- 这样可以方便地在组件之间共享数据,并实现组件之间的解耦。
- redux 也用了
provider
- 也可以理解为 生产者/消费者模式