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

React虽好,但使用Context这两点注意事项须牢记

这就一演示界面,没什么东西,我逻辑也很简单: import React, {memo, useReducer} from 'react'; import {ConfigProvider, Tooltip...这在你系统下场就是你拼合地用memo、PureComponent之类方法优化自己写组件,但那里面的antd组件们却欢快地渲染到停不下来。...原因很容易分析,因为当你打开对话框时候,props是变化,因而contextValue也变化了,所以虽然编辑标签只用了openGlobalModal这个永远不会变东西,却也硬生生被带着渲染了起来。...如果想追求更少地渲染,就要关注第二条经验:一个Context东西往往并不一起被使用,将它们按使用场景分开,特别是要将多变和不变分开。...总结 关注应用中使用Context顺序,让不变在外层,多变在内层。 Context内容可以按使用场景和变与不变来拆分成多个更细粒度匠,以减少渲染。

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

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

熟悉 React 开发同学一定听说过 Redux,而在这篇文章,我们将通过 useReducer + useContext 组合实现一个简易版 Redux。...但实际上 React 源码,useState 实现使用useReducer(本文主角,下面会讲到)。...useReducer 使用浅析 首先,我们还是来看下官方介绍 useReducer 使用方法: const [state, dispatch] = useReducer(reducer, initialArg...useReducer 使用起来较为繁琐,但如果你状态管理出现了至少一个以下所列举问题: 需要维护状态本身比较复杂,多个状态之间相互依赖 修改状态过程比较复杂 那么我们就强烈建议你使用 useReducer...使用起来非常简单: // 某个文件定义 MyContext const MyContext = React.createContext('hello'); // 函数式组件获取 Context

1.5K30

React Hooks - 缓存记忆

React Hooks几乎在所有方面都能让我们在编程获得好处。但是某些时候性能问题,也需要使用一些技巧来解决。我们可以使用Hooks编写快速应用程序,但是动手之前需要注意一两件事。...如果您函数组件相同Props属性下呈现相同结果,React将会使用缓存,跳过这次渲染,并重用最后一次渲染结果。 默认情况下,它将仅对props对象复杂对象进行浅层比较。...由于我们使用是内联函数参数,因此会为每次渲染都会创建新引用,从而使React.memo毫无用处。在记忆组件之前,我们需要一种记忆函数本身方法。...在此示例,缓存记忆正确运行,没有任何错误。...使用useReducer常见模式是与useContext一起使用,以避免大型组件树显式传递回调。

3.5K10

宝啊~来聊聊 9 种 React Hook

useReducer 上边我们提到过基础状态管理钩子 useState , React Hook 额外提供了一个关于状态管理 useReducer。...关于「什么时候使用 useState 又什么时候使用 useReducer」,我个人看来这两种方式使用更像是一种取舍总而言之尽量使用你觉得舒服方法,对你和同事来说更容易理解就可以了。...也许大多数接触 React 朋友会好奇这个 Hook 使用场景,此时让我们来回忆一下 useReducer 章节讲到例子。...我们希望父组件调用子组件方法,虽然 React 官方并不推荐这样声明式写法,但是有时候我们不得不这样做。...当然 React 中所有的 Hook 都是 JS 脚本计算,如果你曾经碰到过 Hook 获取到不正确页面元素位置时,或许这篇一次useEffect引发浏览器执行机制思考会帮你解惑。

1K20

超性感React Hooks(七)useReducer

useReducerReact hooks提供API之一,它和redux使用几乎一样。因此如果你熟悉redux,那么自然就已经知道如何去使用useReducer了。...首先从React引入 import React, { useReducer } from ‘react’; 然后需要定义一个状态值,以表示useReducer维护数据格式。...和redux不同是,useReducer并没有围绕这些痛点提供对应解决方案。因此如果你想要在项目中使用useReducer,仅仅只建议小范围使用,把复杂度控制可以接受范围之内。...3 Redux,借助它提供combineReducer方法,我们可以将多个Reducer合并为一个。这让我们实践时,可以将整个大Reducer进行拆分,以减少复杂度。...分享一个小知识点: useState更新时,源码调用方法叫做updateReducer,而在useReducer实现,也调用了同样方法。 ? ?

2.1K20

React系列-自定义Hooks很简单

React系列-Mixin、HOC、Render Props(上) React系列-轻松学会Hooks() React系列-自定义Hooks很简单(下) 我们第二篇文章中介绍了一些常用hooks,...不明白Redux工作流同学可以看看这篇Redux系列之分析中间件原理(附经验分享) 为什么使用 官方说法: 某些场景下,useReducer 会比 useState 更适用,例如 state 逻辑较复杂且包含多个子值...为什么使用 如果你接触 Hook 前已经对 context API 比较熟悉,那应该可以理解,useContext(MyContext) 相当于 class 组件 static contextType...终于快完结了) 根据业务来说,我把自定义Hooks分为两类,一类是自定义基础Hooks,另一类是自定义业务Hooks 业务Hooks 比如我们多个页面有相同请求方法 // 以use开头 export...基础Hooks就是平时与业务无关工具方法 useEffectOnce 该Hooks函数组件只执行一次 const useEffectOnce = (effect) => { useEffect

2.1K20

超实用 React Hooks 常用场景总结

前言 文章虽然比较长,但是可以说是全网最全最有用总结了,学会记得分享、点赞、收藏、谢谢支持 React v16.8 版本推出了 React Hooks 新特性。...可以将功能代码聚合,方便阅读维护; 组件树层级变浅,原本代码,我们经常使用 HOC/render props 等方式来复用组件状态,增强功能等,无疑增加了组件树层数及渲染,而在 React Hooks...三、useContext 用来处理多层级传递数据方式,以前组件树,跨层级祖先组件想要给孙子组件传递数据时候,除了一层层 props 往下透传之外,我们还可以使用 React Context API...1、基础用法 比 useState 更适用场景:例如 state 逻辑处理较复杂且包含多个子值,或者下一个 state 依赖于之前 state 等;例子如下所示 import React, { useReducer...1 点方法执行完成后,再开启一次任务调度,在下次任务调度执行 useEffect; 总结 关于这方面的文章,我们根据使用场景分别进行举例说明,希望有帮助到你认识理解并可以熟练运用 React Hooks

4.6K30

入门 TypeScript 编写 React

shouldComponentUpdate 一些交浅比较,因此我们真实组件设计,我们一般会用于最后一个关键点组件上。...这个特性我所讲全局对话框或者提示框中非常有用,它脱离了父节点容器,插在最外层,样式上就能通过 position: fixed 来覆盖整个文档树。...我们 state 定义了一个 open,它只接收一个布尔值,用于打开提示框或关闭提示框架,如: export interface IPortalsProps {} export interface...ref 将自定义函数暴露给父组件,这种场景一般情况可以用于父组件操作子组件DOM元素,需要和 forwardRef 配合使用: interface IFancyInput { name:...Context 一个典型 React 应用,数据都是通过 Props 属性自上而下进行传递,但某些情况下这些属性有多个组件需要共享,那么 Context 就提供了这样一种共享方式。

5.2K40

React Hook实践指南

React为什么需要Hook这篇文章我们探讨了React开发团队为什么要为Function Component添加Hook原因,本篇文章我将会为大家提供一份较为全面的React Hook实践指南...我们实际开发,一个组件可能不止一个state,如果组件有多个state,则可以组件内部多次调用useState,以下是一个简单例子: import React, { useState } from...实际开发我们可以使用facebook自家eslint-plugin-react-hooksexhaustive-deps规则来进行编码约束,在你项目加上这个约束之后,代码开发阶段eslint..., string和boolean等 state转换逻辑十分简单 组件内不同状态是没有关联,它们可以使用多个独立useState来单独管理 下列情况使用useReducer state值是object...状态定义父级组件,不过需要在深层次嵌套子组件中使用和改变父组件状态,可以同时使用useReducer和useContext两个hook,将dispatch方法放进context里面来避免组件props

2.4K10

手写ReactHook核心原理,再也不怕面试官问我ReactHook原理

基本准备工作 手写useState useState使用 原理实现 React.memo介绍 手写useCallback useCallback使用 原理实现 手写useMemo 使用 原理 手写useReducer...useState可以函数组件,添加state Hook。...不,还有个问题:就说我们这里只是用了一个useState,要是我们使用了很多个呢?难道要声明很多个全局变量吗?...通常来说,组件树 React 组件,只要有变化就会走一遍渲染流程。但是通过 PureComponent 和 React.memo(),我们可以仅仅让某些组件进行渲染。...一般这种情况下,我会通过 Context Manager 统一管理上下文实例,然后通过 export 将实例导出,子组件将实例 import 进来。

4.3K30

精读《React Hooks 最佳实践》

推荐使用 React.useMemo 而不是 React.memo,因为组件通信时存在 React.useContext 用法,这种用法会使所有用到组件重渲染,只有 React.useMemo 能处理这种场景按需渲染...但对于不需重复初始化对象推荐使用 useRef 存储,比如 new G2() 。 useReducer 局部状态不推荐使用 useReducer ,会导致函数内部状态过于复杂,难以阅读。...useReducer 建议多组件间通信时,结合 useContext 一起使用。 FAQ 可以函数内直接申明普通常量或普通函数吗?...想要阻止这个循环发生,只要改为 onChange={this.handleChange} 即可,useEffect 对外部依赖苛刻要求,只有整体项目都注意保持正确引用时才能优雅生效。...因此使用 useEffect 时要注意调试上下文,注意父级传递参数引用是否正确,如果引用传递不正确,有两种做法: 使用 useDeepCompareEffect 对依赖进行深比较。

1.1K10
领券