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

React内部让人迷惑的性能优化策略

」 1000ms后,setInterval回调触发,执行updateNum(1) App组件再次render,打印「App render 1」 子组件Child再次render,打印「child render...他指:当useState更新的state与当前state一样时(使用Object.is比较),React不会render该组件的「子孙组件」。...实际的性能优化策略 React的工作流程可以简单概括为: 交互(比如点击事件、useEffect)触发更新 组件树render 刚才讲的bailout发生在步骤2:组件树开始render后,命中了bailout...useEffect(() => { setInterval(() => { updateNum(1); }, 1000) }, []) return <Child...总结 综上所述,我们的Demo是混合了这两种优化策略后的结果: App render 0(命中策略) child render App render 1(命中策略) child render App

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

开篇:通过 state 阐述 React 渲染

State setter 函数更新变量(状态发生改变)并触发 React 再次渲染组件useState Hook 提供了这两个功能: State 变量 用于保存渲染间的数据。...组件(或者其祖先之一)状态发生了改变。 渲染组件 在进行初次渲染时, React 会调用根组件。 对于后续的渲染, React 会调用内部状态更新触发了渲染的函数组件。...示例 通过 setInterval 实现每秒+1 import React, { useState, useEffect } from "react"; export default () =>...{ // 定义计数 const [count, setCount] = useState(0); /* 需求:实现每1秒+1 */ useEffect(() => { const...以下是 setInterval 函数通知 React 要做的事情: 前提:useEffect(() => {}, []) 1只执行一次,不会在组件任何的 props 或 state 发生改变时重新运行。

3700

96.精读《useEffect 完全指南》

笔者也一样,而且在三期不同的精读中都分别介绍过这个问题: 精读《React Hooks》 精读《怎么用 React Hooks 造轮子》 精读《Function VS Class 组件》 但第二天就忘记了...回收机制 在组件被销毁时,通过 useEffect 注册的监听需要被销毁,这一点可以通过 useEffect 的返回值做到: useEffect(() => { ChatAPI.subscribeToFriendStatus...function Counter() { const [count, setCount] = useState(0); useEffect(() => { const id = setInterval...“组件初始化执行一次 setInterval,销毁时执行一次 clearInterval,这样的代码符合预期。” 你心里可能这么想。...自然符合 React Fiber 的理念,因为 Fiber 会根据情况暂停或插队执行不同组件的 Render,如果代码遵循了 Capture Value 的特性,在 Fiber 环境下会保证值的安全访问

75830
领券