当前位置: 首页 > wzjs >正文

购物网站项目简介page wordpress

购物网站项目简介,page wordpress,网站建设费用属于什么科目,深圳龙华做网站的公司之前的文章记录了useId,useRef,useState钩子函数的使用和原理,其中useState的执行会触发组件的重新渲染,而useId,useRef不会引发组件的重新渲染。 接下来的要记录的钩子函数useCallback,useMemo是缓冲相关的钩子函数更新不会触发…

之前的文章记录了useId,useRef,useState钩子函数的使用和原理,其中useState的执行会触发组件的重新渲染,而useId,useRef不会引发组件的重新渲染。

接下来的要记录的钩子函数useCallback,useMemo是缓冲相关的钩子函数更新不会触发组件重新渲染。

useCallback、useMemo的基本使用

import React, { useMemo, useState } from 'react';const ExpensiveCalculation = () => {const [count, setCount] = useState(0);const expensiveValue = useMemo(() => {// 模拟一个高开销的计算let sum = 0;for (let i = 0; i < 1000000; i++) {sum += i;}return sum + count;}, [count]);return (<div><p>Count: {count}</p><p>Expensive Value: {expensiveValue}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
};export default ExpensiveCalculation;
import React, { useCallback, useState } from 'react';const CallbackExample = () => {const [count, setCount] = useState(0);const handleClick = useCallback(() => {setCount(count + 1);}, [count]);return (<div><p>Count: {count}</p><button onClick={handleClick}>Increment</button></div>);
};export default CallbackExample;

useCallback

function useCallback<T>(callback: T,deps: Array<mixed> | void | null,
): T {const dispatcher = resolveDispatcher();return dispatcher.useCallback(callback, deps);
}

mountCallback

React 中 useCallback Hook 的 挂载阶段 实现,主要用于 缓存回调函数 以保持引用稳定性。

函数参数含义:

  • callback:想要缓存的函数。此函数可以接受任何参数并且返回任何值。在初次渲染时,React 将把函数返回给你(而不是调用它!)。当进行下一次渲染时,如果 deps 相比于上一次渲染时没有改变,那么 React 将会返回相同的函数。否则,React 将返回在最新一次渲染中传入的函数,并且将其缓存以便之后使用。React 不会调用此函数,而是返回此函数。你可以自己决定何时调用以及是否调用。
  • deps:有关是否更新 fn 的所有响应式值的一个列表。响应式值包括 props、state,和所有在你组件内部直接声明的变量和函数。如果你的代码检查工具 配置了 React,那么它将校验每一个正确指定为依赖的响应式值。依赖列表必须具有确切数量的项,并且必须像 [dep1, dep2, dep3] 这样编写。React 使用 Object.is 比较每一个依赖和它的之前的值。
function mountCallback<T>(callback: T, deps: Array<mixed> | void | null): T {// 创建新的 Hook 对象并添加到当前 Fiber 节点的 Hook 链表中。const hook = mountWorkInProgressHook();// 处理依赖数组const nextDeps = deps === undefined ? null : deps;// 缓存回调函数hook.memoizedState = [callback, nextDeps];return callback;
}

updateCallback

React 中 useCallback Hook 的 更新阶段 实现,主要用于 比较依赖项 并决定是否返回缓存的回调函数。

function updateCallback<T>(callback: T, deps: Array<mixed> | void | null): T {// 获取当前 Hookconst hook = updateWorkInProgressHook();// 处理依赖数组const nextDeps = deps === undefined ? null : deps;const prevState = hook.memoizedState;// 比较依赖项if (nextDeps !== null) {const prevDeps: Array<mixed> | null = prevState[1];if (areHookInputsEqual(nextDeps, prevDeps)) {return prevState[0];}}// 更新缓存并返回新函数hook.memoizedState = [callback, nextDeps];return callback;
}

useMemo

function useMemo<T>(create: () => T,deps: Array<mixed> | void | null,
): T {const dispatcher = resolveDispatcher();return dispatcher.useMemo(create, deps);
}

mountMemo

React 中 useMemo Hook 的 挂载阶段 实现,主要用于 缓存计算结果 以避免重复计算。

函数参数含义:

  • nextCreate:要缓存计算值的函数。它应该是一个没有任何参数的纯函数,并且可以返回任意类型。React 将会在首次渲染时调用该函数;在之后的渲染中,如果 deps 没有发生变化,React 将直接返回相同值。否则,将会再次调用 nextCreate 并返回最新结果,然后缓存该结果以便下次重复使用。
  • deps:所有在 nextCreate 函数中使用的响应式变量组成的数组。响应式变量包括 props、state 和所有你直接在组件中定义的变量和函数。如果你在代码检查工具中 配置了 React,它将会确保每一个响应式数据都被正确地定义为依赖项。依赖项数组的长度必须是固定的并且必须写成 [dep1, dep2, dep3] 这种形式。React 使用 Object.is 将每个依赖项与其之前的值进行比较。
function mountMemo<T>(nextCreate: () => T,deps: Array<mixed> | void | null,
): T {const hook = mountWorkInProgressHook();// 未提供依赖数组,设置为nullconst nextDeps = deps === undefined ? null : deps;// 计算结果const nextValue = nextCreate();// 缓存结果hook.memoizedState = [nextValue, nextDeps];return nextValue;
}

updateMemo

React 中 useMemo Hook 的 更新阶段 实现,主要用于 比较依赖项 并决定是否重新计算缓存值。

function updateMemo<T>(nextCreate: () => T,deps: Array<mixed> | void | null,
): T {const hook = updateWorkInProgressHook();const nextDeps = deps === undefined ? null : deps;const prevState = hook.memoizedState;// Assume these are defined. If they're not, areHookInputsEqual will warn.if (nextDeps !== null) {const prevDeps: Array<mixed> | null = prevState[1];if (areHookInputsEqual(nextDeps, prevDeps)) {// 返回缓冲值return prevState[0];}}// 重新计算const nextValue = nextCreate();hook.memoizedState = [nextValue, nextDeps];return nextValue;
}

工具函数之 areHookInputsEqual

React 中用于 比较 Hook 依赖项 的核心函数,主要用于 useMemouseCallbackuseEffect 中判断依赖项是否变化。

function areHookInputsEqual(nextDeps: Array<mixed>,prevDeps: Array<mixed> | null,
): boolean {// 组件首次挂载时,prevDeps 为 null。if (prevDeps === null) {// 直接返回 false,表示依赖项变化,触发计算 / 执行。return false;}// 逐项浅比较for (let i = 0; i < prevDeps.length && i < nextDeps.length; i++) {// 使用 is 函数(类似 Object.is)比较每个元素。if (is(nextDeps[i], prevDeps[i])) {continue;}// 若任意元素不相等,立即返回 false。return false;}return true;
}

工具函数之 objectIs

该函数主要用于判断两个值是否严格相等,处理了 JavaScript 中一些特殊的相等性比较场景。

is 函数的主要作用是:

  1. 基础严格相等:使用 === 判断基本相等性。
  2. 特殊值处理
    • 区分 +0-0(返回 false)。
    • 处理 NaNNaNNaN 返回 true)。

function is(x: any, y: any) {return ((x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y) // eslint-disable-line no-self-compare);
}const objectIs: (x: any, y: any) => boolean =typeof Object.is === 'function' ? Object.is : is;export default objectIs;

useMemo和useCallback 的区别?


文章转载自:

http://Z9mHD8rZ.yrfLh.cn
http://nWvJZ0CS.yrfLh.cn
http://7bhzOLdQ.yrfLh.cn
http://Hj0IqqWj.yrfLh.cn
http://oXmc4cnc.yrfLh.cn
http://fACjh6fQ.yrfLh.cn
http://Qz12ir6o.yrfLh.cn
http://QD1GfpIs.yrfLh.cn
http://W9oepLYy.yrfLh.cn
http://tcoHPCwk.yrfLh.cn
http://GcyYytuE.yrfLh.cn
http://dwNGDKgT.yrfLh.cn
http://SZDOfdx9.yrfLh.cn
http://Hcthw8L5.yrfLh.cn
http://i60n5wC9.yrfLh.cn
http://eGYtd7TT.yrfLh.cn
http://qAoEx5wV.yrfLh.cn
http://MnQyzK8l.yrfLh.cn
http://J5wspOui.yrfLh.cn
http://4rxovPog.yrfLh.cn
http://ClZo5f58.yrfLh.cn
http://w23vPCK3.yrfLh.cn
http://L7rwUFlZ.yrfLh.cn
http://0idnFFH9.yrfLh.cn
http://pJk3iZir.yrfLh.cn
http://l5vOAYQF.yrfLh.cn
http://nXYlRwNb.yrfLh.cn
http://X8D2h6YR.yrfLh.cn
http://3gx3shHy.yrfLh.cn
http://9Bbt3r6q.yrfLh.cn
http://www.dtcms.com/wzjs/670868.html

相关文章:

  • 发布网站制作asp网站会员注册不了
  • 科技风格设计网站经验分享的网站开发
  • 网站开发的产品用什么形容词形容东莞网站建设网站排名优化
  • 做网站项目前怎么收集需求做设计网站的工作怎么样的
  • 做购物网站安全吗一份优秀的网络推广方案
  • 上海网站建设招聘国外服装设计师网站
  • 建设简单企业网站企业网站案例公司
  • 果洛wap网站建设哪家好可以自己做论坛网站吗
  • 无锡网站开发公司电话wordpress doc插件
  • 电商网站优缺点成都口碑最好的家装公司
  • 中山网站制作费用做安卓开发要去看哪些网站
  • 个人网站建设价格表零基础学it哪个专业好
  • 促销型网站公司邮箱手机怎么登录
  • php网站建设案例教程做网站几百块可信吗
  • 杨凌住房和城乡建设局网站wordpress linux 伪静态
  • 百度推广 做网站山楂树建站公司
  • 北京网站开发教师招聘如何用 python 做网站
  • 深圳住房和建设局网站网上预约巩义网站网站建设
  • 免费网站建站工具网站建设行业细分
  • 昆明做凡科网站深圳快速网站制作哪家公司好
  • 建设用地规划许可证在哪个网站查询那个公司做网站好
  • 苍南网站建设公司长沙网络推广营销
  • 设计本官方网站 网络服务跨国购物网站建设费用
  • 网站开发合作意向协议书肃宁哪里建网站
  • 手机号码定位网站开发html好看的网站
  • 网站维护怎么样广州腾虎网络科技有限公司
  • 建设网站前的市场分析主要包括哪些内容网站导入链接
  • 互联网网站如何做流量统计浏览器免费下载
  • 用asp做网站需要什么软件dedecms 漏洞
  • 南宁网站建设方案报价怎么用自助网站