react 计算属性

server/2024/12/17 4:10:33/

一、计算属性的概念(通过函数和钩子实现)

1. 使用`useMemo`钩子(用于性能优化)

`useMemo`是一个 React 钩子,用于缓存计算结果。它会在组件重新渲染时,根据依赖项数组来决定是否重新计算。如果依赖项没有改变,就会返回之前缓存的计算结果,从而避免不必要的计算开销。

javascript">import React, { useState, useMemo } from "react";function MyComponent() {const [numbers, setNumbers] = useState([1, 2, 3, 4, 5]);const sum = useMemo(() => {return numbers.reduce((acc, cur) => acc + cur, 0);}, [numbers]);return (<div><p>The sum of numbers is: {sum}</p><button onClick={() => setNumbers([...numbers, 6])}>Add a number</button></div>);}

2. 使用`useCallback`钩子(用于缓存函数)

`useCallback`主要用于缓存函数。在 React 中,当组件重新渲染时,函数会被重新创建。但是有些情况下,我们希望函数在依赖项没有改变时保持不变,以避免不必要的子组件重新渲染。

javascript">import React, { useState, useCallback } from "react";function ParentComponent() {const [count, setCount] = useState(0);const handleClick = useCallback(() => {setCount(count + 1);}, [count]);return (<div><p>Count: {count}</p><ChildComponent onClick={handleClick} /></div>);}function ChildComponent({ onClick }) {return <button onClick={onClick}>Increment in Child</button>;}

二、与传统计算属性(如 Vue 中的计算属性)的对比

1. 响应式原理差异

在 Vue 中,计算属性是基于响应式数据自动计算的。当响应式数据发生变化时,计算属性会自动重新计算。

在 React 中,需要手动使用`useMemo`或`useCallback`来实现类似的功能,并且需要明确指定依赖项来控制计算的触发。

2. 语法和使用方式差异

Vue 的计算属性在组件的`computed`选项中定义,语法比较简洁明了。

javascript">export default {data() {return {numbers: [1, 2, 3, 4, 5],};},computed: {sum() {return this.numbers.reduce((acc, cur) => acc + cur, 0);},},};

在 React 中,`useMemo`和`useCallback`是函数式组件中的钩子,需要在函数组件的顶部引入并按照特定的语法规则使用。它们更侧重于性能优化和函数引用的管理。


http://www.ppmy.cn/server/150800.html

相关文章

Node.js基础入门

1.Node.js 简介 Node 是一个让 JavaScript (独立)运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。 简单的说 Node.js 就是运行在服务端的…

图像分割数据集植物图像叶片健康状态分割数据集labelme格式180张3类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;180 标注数量(json文件个数)&#xff1a;180 标注类别数&#xff1a;3 标注类别名称:["Healthy","nitrogen deficiency"…

Docker方式安装人人影视离线完整安装包

本文软件由网友 ルリデ 推荐&#xff1b; 上周&#xff0c;人人影视创始人宣布将人人影视二十年字幕数据开源分享 目前提供了两种使用方式&#xff1a; “在线应用” &#xff1a;意味着需要有互联网才可以使用。官方提供了网站&#xff1a;https://yyets.click “离线使用” …

SparkSQL多个count distinct 执行效率优化

写了一段非常简单的SQL。 数据量级一天大约5千万&#xff0c;拉取的30天的数据&#xff0c;按天 count(distinct)计算一系列指标。原本以为执行的效率会很快&#xff0c;结果发现运行了2h&#xff01;所有探究其为什么运行慢&#xff0c;以及后续该如何规避这类问题。Spark使用…

xpath规则

路径表达式 谓语 用来查找某个特定的节点或者包含某个指定的值的节点 谓语被嵌在方括号中 选择未知节点 选取若干路径 使用“|”运算符 python中lxml使用 from lxml import etree import requests # 参数往往是一个html字符串 url "https://www.baidu.com/" hea…

Scala隐式转换的其他使用场景

1. 类型的隐式参数 隐式转换可以与类型参数一起使用&#xff0c;以便在需要类型参数时自动提供。例如&#xff1a; trait Show[T] {def show(value: T): String }def printValue[T](value: T)(implicit showInstance: Show[T]): Unit {val str showInstance.show(value)pri…

基于Dockerfile的博客管理系统的容器化部署

目录 任务描述 3 1.1课题的基本内容 3 1.2 项目整体技术架构 3 1.3主要技术栈&#xff1a; 3 1.4 模块划分 4 1.5 容器集群化部署的任务内容 5 1.6 项目容器化部署的目的 6总体结构 7 2.1 容器角色和功能 7 2.2 容器之间的关联关系 8 2.3 数据流动示例 8 3.详细设计 9 3.1 设计…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…