首页
学习
活动
专区
圈层
工具
发布

用动画和实战打开 React Hooks(三):useReducer 和 useContext

熟悉 React 开发的同学一定听说过 Redux,而在这篇文章中,我们将通过 useReducer + useContext 的组合实现一个简易版的 Redux。...但实际上在 React 的源码中,useState 的实现使用了 useReducer(本文的主角,下面会讲到)。...useReducer 使用浅析 首先,我们还是来看下官方介绍的 useReducer 使用方法: const [state, dispatch] = useReducer(reducer, initialArg...什么时候该用 useReducer 你也许发现,useReducer 和 useState 的使用目的几乎是一样的:定义状态和修改状态的逻辑。...useContext 使用浅析 现在状态的获取和修改都已经通过 useReducer 搞定了,那么只差一个问题:怎么让所有组件都能获取到 dispatch 函数呢?

1.9K30

React useReducer 终极使用教程

当我们关注的焦点不在useReducer用法细节上时,我们会在宏观上看到render和state的变化过程。...useReducer 结合 useContext 使用 在日常的开发中,组件之间共享state的时候,很多人使用全局的state,虽然这样可以满足需求,但是降低了组件的灵活性和扩展性,所以更优雅的一种方式是使用...useContext,对于useContext不熟悉的同学可以参考react官方文档关于这一部分的讲解。...在本例子中,笔者将使用useContext 和 useReducer 函数一起使用,看下面的代码: const CountContext = React.createContext(); const...React useReducer 教程总结 到这里 useReducer 的使用场景和用法例子讲解都已经介绍完成了,最后我们回顾一下,首先类比于redux的reducer,useReducer 的思路和

4.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React中useContext的基本使用和原理解析

    React 中 useContext 的使用方法在 React 中,useContext 是一个内置的 Hook,用于在函数组件中轻松访问 Context(全局公共状态),避免了手动逐层传递 props...它依赖于 Context API,通过 Provider 提供数据,后代组件通过 useContext 消费数据。以下是详细的使用方法和步骤,基于 React 官方指南和实践经验。1....这个对象包含 Provider 和 Consumer 组件,但 useContext 简化了消费过程。...同样重新渲染,但可通过 React.memo 优化useContext 实现原理详解useContext 的实现原理基于 React 的 上下文机制(Context) 和 订阅-发布模式,主要涉及三个核心环节...值读取与订阅机制当调用 useContext(MyContext) 时:function useContext(Context) { // 1. 从 Context.

    19310

    useContext

    Context与Reducer Context是React提供的一种跨组件的通信方案,useContext与useReducer是在React 16.8之后提供的Hooks API,我们可以通过useContext...当然在这里我们还是要额外讨论下是不是需要使用Context,使用Context可能会带来一些性能问题,因为当Context数据更新时,会导致所有消费Context的组件以及子组件树中的所有组件都发生re-render...在React 16.8之后,React提供了useContext来消费Context,useContext接收一个Context对象并返回该Context的当前值。...也就是说,我们可以使用useContext与useReducer来实现一个轻量级的redux。...此外除了层级式按使用场景拆分Context,一个最佳实践是将多变的和不变的Context分开,让不变的Context在外层,多变的Context在内层。

    1.2K10

    ReactHooks学习记录

    (){ const [num,setNum] = useState(0)     // useEffect相当于是一个生命周期 异步     // 组件渲染完成后和组件更新时 调用     // componentDidMount...} // 空数组[]时,就是当组件将被销毁时才进行解绑 // 实现了componentWillUnmount的生命周期函数     },[]) } 3.useContext和createContext...// 1引用userContext和createContext来传参 import React, { useState,useContext,createContext } from 'react';...//2创建一个createContext上下文 const NumContent = createContext(); // 4.创建子路由 function Didi(){     // 4.1使用useContext...   import React, { useReducer } from 'react';     // 创建一个reducer 传递两个参数 一个是传递的值 一个是如何控制这个值     function

    57520

    React Hook实践指南

    ,其中包括以下方面的内容: 什么是React Hook 常用Hook介绍 useState useEffect useRef useCallback useMemo useContext useReducer...设置相同的state值时setState会bailing out of update 如果setState接收到的新的state和当前的state是一样的(判断方法是Object.is),React将不会重新渲染子组件或者触发..., string和boolean等 state的转换逻辑十分简单 组件内不同的状态是没有关联的,它们可以使用多个独立的useState来单独管理 下列情况使用useReducer state的值是object...状态定义在父级组件,不过需要在深层次嵌套的子组件中使用和改变父组件的状态,可以同时使用useReducer和useContext两个hook,将dispatch方法放进context里面来避免组件的props...drilling 如果你希望你的状态管理是可预测的(predictable)和可维护的(maintainable),请useReducer 如果你希望你的状态变化可以被测试,请使用useReducer

    3K10

    React Hooks的使用

    使用React Hooks,可以大大简化组件的编写,并提高代码的可读性和可维护性。本文将介绍React Hooks的基本用法和一些最佳实践。...使用useContext Hook,我们可以轻松地在组件之间传递数据,而无需手动传递属性。1. 创建上下文我们可以使用React.createContext方法来创建一个上下文。...4. useContext Hook的使用我们还可以使用useContext Hook来使用上下文中的数据。useContext Hook接受一个上下文对象作为参数,并返回上下文的当前值。...useReducer Hook接受一个Reducer函数和一个初始状态作为参数,并返回一个数组,包含当前的状态和一个dispatch函数。...在使用React Hooks时,我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    58600

    React 设计模式 0x3:Ract Hooks

    useContext 在使用 React Hooks 时,需要遵循一些规则: Hooks 只能在函数式组件中调用 Hooks 必须从顶层调用,不能在循环、条件语句等内部调用 可以创建自己的 Hooks,...useReducer 方法是常用的 React Hooks 之一。...当应用程序中存在复杂的状态更改时,可以使用此 Hook,类似于 useState,但是需要发送 action 来更新状态: import React, { useReducer } from "react...useEffect 有两个参数(箭头函数和可选的依赖项数组),用于异步操作。 依赖项数组是可选的,不传入数组时,回调函数会在每次渲染后执行,传入空数组时,回调函数只会在组件挂载和卸载时执行。...如果没有必要进行同步的操作,建议使用 useEffect 来代替,以获得更好的性能和更流畅的用户体验。

    2.5K10

    React核心 -- React-Hooks

    作用:带着子组件渲染 注意: 上层数据发生改变,肯定会触发重新渲染 我们需要引入 useContext 和 createContext 两个内容 通过 createContext 创建一个 Context...句柄 通过 Provider 确定数据共享范围 通过 value 来分发数据 在子组件中,通过 useContext 来获取数据 import React, { useContext, createContext...return 子组件2 {num} } 8. useReducer 作用:去其他地方借资源 注意:函数组件的 Redux 的操作 创建数据仓库 store 和管理者 reducer...通过 useReducer(store,dispatch) 来获取 state 和 dispatch const store = { num: 10 } const reducer = (state...,我们自己写一个 hooks 自定义一个自己的 LocalReducer import React, { useReducer } from "react"; const store = { num:

    1.6K10

    React核心 -- React-Hooks

    作用:带着子组件渲染 注意: 上层数据发生改变,肯定会触发重新渲染 我们需要引入 useContext 和 createContext 两个内容 通过 createContext 创建一个 Context...句柄 通过 Provider 确定数据共享范围 通过 value 来分发数据 在子组件中,通过 useContext 来获取数据 import React, { useContext, createContext...return 子组件2 {num} } 8. useReducer 作用:去其他地方借资源 注意:函数组件的 Redux 的操作 创建数据仓库 store 和管理者 reducer...通过 useReducer(store,dispatch) 来获取 state 和 dispatch const store = { num: 10 } const reducer = (state...,我们自己写一个 hooks 自定义一个自己的 LocalReducer import React, { useReducer } from "react"; const store = { num:

    1.5K20

    医疗数字阅片-医学影像-REACT-Hook API索引

    如果想执行只运行一次的 effect(仅在组件挂载和卸载时执行),可以传递一个空数组([])作为第二个参数。...useContext const value = useContext(MyContext); 接收一个 context 对象(React.createContext 的返回值)并返回该 context...即使祖先使用 React.memo 或 shouldComponentUpdate,也会在组件本身使用 useContext 时重新渲染。...指定初始 state 有两种不同初始化 useReducer state 的方式,你可以根据使用场景选择其中的一种。...把“创建”函数和依赖项数组作为参数传入 useMemo,它仅会在某个依赖项改变时才重新计算 memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。

    2.7K30

    「不容错过」手摸手带你实现 React Hooks

    class 的情况下使用 state 以及其他的 React 特性 凡是 use 开头的 React API 都是 Hooks Hook 是什么 Hook 是一个特殊的函数,它可以让你“钩入” React...只在 React 函数中调用 Hook 在 React 的函数组件中调用 Hook 在自定义 Hook 中调用其他 Hook 利用 eslint 做 hooks 规则检查 使用 eslint-plugin-react-hooks...仍然需要在上层组件树中使用 来为下层组件提供 context function useContext(context) { return context...和 redux 中 reducer 很像 useState 内部就是靠 useReducer 来实现的 // 保存状态的数组 let hookStates = []; // 索引...参考 Hook 规则 React Hooks 详解 【近 1W 字】+ 项目实战 推荐 React Hooks 父组件中获取子组件实例值 React Hooks 中 useRef 的优雅使用 后记

    1.6K10

    超实用的 React Hooks 常用场景总结

    在我看来,使用 React Hooks 相比于从前的类组件有以下几点好处: 代码可读性更强,原本同一块功能的代码逻辑被拆分在了不同的生命周期函数中,容易使开发者不利于维护和迭代,通过 React Hooks...三、useContext 用来处理多层级传递数据的方式,在以前组件树中,跨层级祖先组件想要给孙子组件传递数据的时候,除了一层层 props 往下透传之外,我们还可以使用 React Context API...Context 对象值 import React, { useContext } from 'react'; import ThemeContext from '....useContext:{value} ); } export default ContextComponent; 四、useReducer 1、基础用法 比 useState... ); } export default UseReducer; 五、Memo 如下所示,当父组件重新渲染时,子组件也会重新渲染,即使子组件的 props 和 state 都没有改变

    5.3K30
    领券