首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用动画实战打开 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.5K30

React useReducer 终极使用教程

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

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

useContext

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

93010

React Hook实践指南

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

2.4K10

ReactHooks学习记录

(){ const [num,setNum] = useState(0)     // useEffect相当于是一个生命周期 异步     // 组件渲染完成后组件更新 调用     // componentDidMount...} // 空数组[],就是当组件将被销毁才进行解绑 // 实现了componentWillUnmount的生命周期函数     },[]) } 3.useContextcreateContext...// 1引用userContextcreateContext来传参 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

38020

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

13100

React 设计模式 0x3:Ract Hooks

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

1.5K10

「不容错过」手摸手带你实现 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.2K10

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.3K10

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.2K20

超实用的 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 都没有改变

4.6K30

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

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

2K30

精读《React Hooks 最佳实践》

简介 React 16.8 于 2019.2 正式发布,这是一个能提升代码质量开发效率的特性,笔者就抛砖引玉先列出一些实践点,希望得到大家进一步讨论。...推荐使用 React.useMemo 而不是 React.memo,因为在组件通信存在 React.useContext 的用法,这种用法会使所有用到的组件重渲染,只有 React.useMemo 能处理这种场景的按需渲染...但对于不需重复初始化的对象推荐使用 useRef 存储,比如 new G2() 。 useReducer 局部状态不推荐使用 useReducer ,会导致函数内部状态过于复杂,难以阅读。...useReducer 建议在多组件间通信,结合 useContext 一起使用。 FAQ 可以在函数内直接申明普通常量或普通函数吗?...Props 变量的方式,而频繁组件间通信使用 React.useContext

1.1K10
领券