当前位置:   article > 正文

react hooks的useContext

react hooks的useContext

简介:

React 的 useContext Hook 用于在函数组件中获取上下文(Context)的值。它允许我们在组件中订阅并访问由 React 的 Context API 提供的值。

首先,我们需要创建一个上下文对象。上下文对象被创建时,它包含一个 Provider 和一个 Consumer。

在创建上下文对象后,我们可以使用 useContext Hook 在函数组件中订阅上下文的值。

以下是使用 useContext Hook 的一般步骤:

  1. 创建上下文对象:
  1. import React, { createContext } from 'react';
  2. // 创建上下文对象
  3. const MyContext = createContext();

  1. 在顶层组件中通过 Provider 提供上下文的值:
  1. import React from 'react';
  2. import { MyContext } from './MyContext';
  3. function App() {
  4. return (
  5. // 使用 Provider 提供上下文的值
  6. <MyContext.Provider value="Hello, World!">
  7. <ChildComponent />
  8. </MyContext.Provider>
  9. );
  10. }

  1. 在子组件中使用 useContext Hook 获取上下文的值:
  1. import React, { useContext } from 'react';
  2. import { MyContext } from './MyContext';
  3. function ChildComponent() {
  4. // 使用 useContext Hook 获取上下文的值
  5. const contextValue = useContext(MyContext);
  6. return <div>{contextValue}</div>;
  7. }

在上面的示例中,我们首先创建了一个名为 MyContext 的上下文对象,并将其导出供其他组件使用。

然后,在根组件 App 中,我们使用 MyContext.Provider 组件提供上下文的值,并将要共享的值传递给 value 属性。

最后,在子组件 ChildComponent 中,我们使用 useContext Hook 来接收 MyContext 上下文对象的值,并将其赋值给 contextValue 变量。然后,我们可以在组件中使用这个值。

需要注意的是,useContext Hook 接收一个上下文对象作为参数,并返回上下文的当前值。它只能在函数组件的顶层中使用,而不能在嵌套的函数或类中使用。

当上下文的值发生变化时,使用 useContext Hook 的组件会自动重新渲染。这使得我们可以便捷地使用 React 的 Context API 来共享和订阅全局状态。

全部代码:

  1. import React, { createContext, useContext } from 'react';
  2. // 使用 useContext 函数可以避免在组件层层传递 props,从而简化了组件之间的数据共享。
  3. // 创建一个 Context 对象
  4. const MyContext = createContext();
  5. // 在组件树中的某个位置提供 Context 的值
  6. function MyProvider(props) {
  7. const contextValue = {...props.student};
  8. return <MyContext.Provider value={contextValue}>{props.children}</MyContext.Provider>;
  9. }
  10. function Bag() {
  11. const contextValue = useContext(MyContext);
  12. return (
  13. <div>
  14. <p>Bag: {contextValue.bag}</p>
  15. </div>
  16. );
  17. }
  18. // 使用 useContext 来使用 Context 中的值
  19. function MyComponent() {
  20. const contextValue = useContext(MyContext);
  21. return (
  22. <div>
  23. <p>Name: {contextValue.name}</p>
  24. <p>Age: {contextValue.age}</p>
  25. <Bag></Bag>
  26. </div>
  27. );
  28. }
  29. // 在组件中使用 Context
  30. export default function App() {
  31. const [state, setState] = React.useState({
  32. name: 'Tom',
  33. age: 18,
  34. bag: '两本书 一壶水'
  35. });
  36. return (
  37. <MyProvider student={state}>
  38. <MyComponent />
  39. </MyProvider>
  40. );
  41. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号