【React Hooks 学习笔记】useContext

简介: 前端西瓜哥

大家好,我是前端西瓜哥。今天简单说说 React Hooks 的 useContext。

useContext 用于获取 React 的 Context 对象。

const value = useContext(MyContext);

React 的 Context 指的是组件上下文的意思,用于简化子组件跨多层中间组件和上层组件的通信问题。

如果用 props 一个个往下传,直接人传晕了。而且要是以后中间组件又套多了几个,又要补上对应 props,也不利于组件的通用化。

比如你需要子组件可以修改上层组件的状态,传入了一个 setState 方法,此时 Context 是非常不错的方案。

useContext() 会拿到离它最近的 Context.Provider,即拿到向上最近的 <MyContext.Provider value={myValue}>)的 value。如果找不到,则会使用 createContext 时传入的默认值。

下面我们不妨看个例子。

import React, { createContext, useContext, useState } from 'react'
const CounterContext = createContext(() => { console.log('默认值') });
function Counter() {
  const [count, setCount] = useState(0);
  return (
    <CounterContext.Provider value={setCount}>
      <div>
        <div>count { count }</div>
        <A />
      </div>
    </CounterContext.Provider>
  )
}
function A() {
  const setCount = useContext(CounterContext); // 拿到 Counter 下的 setCount
  return (
    <div>
      <button onClick={() => { setCount(pre => pre + 1) }}>加一</button>
    </div>
  )
}

还是一个定时器,但这次我们将 count 状态的更新方法提供给它的子组件。这里为了更专注于核心逻辑,所以故意写简单点,只有一个子组件。

我们先通过 createContext 创建一个 Context,并提供一个默认函数。

我们的 A 组件,找到的最近的 provider 是位于 Counter 组件下的 setCount 更新函数,然后 A 组件就成功通过这个方法更新了 Counter 组件的状态。

如果你把 <CounterContext.Provider />  组件移除,你会发现点击 A 组件下的按钮后,只会在控制台输出 “默认值”,因为 A 组件找不到 Provider,使用了默认函数。

默认函数很少会用到,起一个兜底的作用。

相关文章
|
10天前
|
前端开发 JavaScript 安全
TypeScript在React Hooks中的应用:提升React开发的类型安全与可维护性
【7月更文挑战第17天】TypeScript在React Hooks中的应用极大地提升了React应用的类型安全性和可维护性。通过为状态、依赖项和自定义Hooks指定明确的类型,开发者可以编写更加健壮、易于理解和维护的代码。随着React和TypeScript的不断发展,结合两者的优势将成为构建现代Web应用的标准做法。
|
11天前
|
前端开发
React Hooks实战技巧:提升你的组件开发效率
【7月更文挑战第16天】React Hooks为React开发带来了革命性的变化,使得函数式组件更加强大和灵活。通过掌握上述实战技巧,你可以更高效地编写清晰、可维护和可复用的React组件。希望这些技巧能帮助你在React开发之路上走得更远。
|
14天前
|
前端开发 JavaScript 开发者
前端框架与库 - React生命周期与Hooks
【7月更文挑战第13天】React 框架革新UI构建,引入Hooks简化组件状态管理和副作用处理。组件生命周期涉及挂载、更新、卸载,对应不同方法,如`componentDidMount`、`shouldComponentUpdate`等,但现在推荐使用`useState`和`useEffect` Hooks。`useEffect`处理副作用,需注意清理和依赖数组。避免问题的关键在于正确使用Hooks和理解其工作模式,以构建高效应用。
|
21天前
|
前端开发 JavaScript 数据格式
react18【系列实用教程】Hooks (useState,useReducer,useRef,useEffect,useContext,useMemo,useCallback,自定义 Hook )
react18【系列实用教程】Hooks (useState,useReducer,useRef,useEffect,useContext,useMemo,useCallback,自定义 Hook )
23 1
|
24天前
|
缓存 前端开发 JavaScript
React Hooks(实例及详解)
【7月更文挑战第2天】React Hooks(实例及详解)
21 3
|
14天前
|
存储 前端开发 JavaScript
react hooks 学习进阶
【7月更文挑战第12天】 React Hooks(自16.8版起)让函数组件能处理状态和副作用。useState用于添加状态管理,useEffect处理副作用,useContext共享数据,useReducer处理复杂状态逻辑,useRef获取引用。进阶技巧涉及性能优化,如useMemo和useCallback,以及遵循规则避免在不适当位置调用Hooks。理解异步更新机制和结合Redux等库提升应用复杂性管理。持续学习新技巧是关键。
14 0
|
21天前
|
前端开发
react18【系列实用教程】Hooks 闭包陷阱 (2024最新版)含useState 闭包陷阱,useEffect 闭包陷阱,useCallback 闭包陷阱
react18【系列实用教程】Hooks 闭包陷阱 (2024最新版)含useState 闭包陷阱,useEffect 闭包陷阱,useCallback 闭包陷阱
17 0
|
21天前
|
前端开发
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
20 0
|
29天前
|
移动开发 前端开发 Java
技术笔记:ReactNative学习笔记(一)————(RN)快速入门
技术笔记:ReactNative学习笔记(一)————(RN)快速入门
23 0
|
1月前
|
缓存 前端开发 JavaScript
React Hooks 一步到位
React Hooks 一步到位