react—Hook(1)

1. useState——见react语法(2)

2. useEffect——见react语法(2)

3. useRef—获取页面元素

用来获取页面中的元素,这样就可以对这个元素进行操作。获取元素需要使用.current才能获取到页面中的具体元素。

定义:box=useRef(null)

绑定:<div ref={box}></div>

使用:box.current.样式等等

简单使用:

import { useEffect, useRef } from 'react'export default function App() {let box = useRef(null);useEffect(() => {box.current.style.backgroundColor = 'skyblue';},[box])return (<div><h2>App</h2><div ref={box}>box</div></div>);
}

 使用react框架实现原生放大镜效果和拖拽效果。

4. 组件反向传值

父组件传给子组件的值,子组件只能渲染,不能更改。想要子组件可以更改父组件传的数据,可以使用反向传参。就是父组件将数据和方法都传给子组件,子组件修改完后再传给父组件。

// 父组件
import React, { useState } from "react";
import Box from "./Box.jsx";
export default function App() {let [msg, setMsg] = useState("父传给子的");return (<div><h2>App---{msg}</h2><Box data={[msg, setMsg]}></Box></div>);
}
// 子组件
export default function Box({ data }) {let [msg, setMsg] = data;let changebox = () => {setMsg("子反向传给父的");}return (<div><h3>Box---{msg}</h3><button onClick={changebox}>changebox</button></div>);
}

5. useCallback—缓存函数

使用时机:当组件被多次重复调用时,组件内部的局部函数就要用useCallback来包裹。主要是用来优化代码的。

当Box被多次使用时,fm函数创建了多次(因为函数是一种引入数据),但它的函数体内的逻辑代码却是一样的,这样设计的局部函数会导致性能问题

解决办法——useCallback。fm函数是用useCallback生成的,所以就算Box组件重复使用时,传入的回调函数只会生成一次。

案例:当页面第一次渲染时,由于父组件给子组件传的值是有四个元素的数组,所以fm运行了四次,也就是Box组件中打印了四次111。使用useEffect函数来监听fm函数。

// 父组件
import React, { useState } from "react";
import Box from "./Box.jsx";
export default function App() {let info = [{ id: 1, text: "商品1"},{ id: 2, text: "商品2"},{ id: 3, text: "商品3"},{ id: 4, text: "商品4" },];let fm = (arg) => {console.log(arg);};return (<div><h2>App</h2>{info.map((el) => (<Box data={el} key={el.id} like={fm}></Box>))}</div>);
}// 子组件
import React, { useCallback, useEffect, useState } from "react";export default function Box({ data, like }) {let [count, changeCount] = useState(2);let fm=()=>{like(data.id); }useEffect(() => {console.log(111);}, [fm]);return (<div><div>{data.text}---{count}</div><button onClick={fm}>点赞</button><button onClick={() => changeCount(count + 1)}>加1</button></div>);
}

通过“加1”按钮,使count增加时,会发现fm也运行了,也就是count改变一次就运行一次fm,而是实际中,我们只改变了count的值,和fm没有关系,就会影响性能。我们想要的是,把在函数组件内部定义的函数保存起来,当组件重新渲染时还是使用之前的,就不会被重新定义一次。

// 将上面的fm函数换成下面这个就可以实现了
let fm = useCallback(() => {like(data.id);}, [count]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLite Expert Professional将ACCESS数据库文件导入到SQLITE

一、下载与安装 下载对应的位数的SQLite Expert&#xff1a;http://www.sqliteexpert.com/download.html &#xff0c;建议下载professional版本的&#xff0c;功能更加强大。 如果官网进不去可以到百度云下载&#xff1a;https://pan.baidu.com/s/17igndAqQ7SQ57LcjwS4WIQ …

云原生之深入解析Docker容器的网络及其配置

一、Docker 容器网络 Docker 在安装后自动提供 3 种网络&#xff0c;可以使用 docker network ls 命令查看&#xff1a; [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE cd97bb997b84 bridge …

spring cloud 之 ribbon

Ribbon概念 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具&#xff0c;主要功能是提供客户端负载均衡算法和服务调用。简单的说&#xff0c;就是在配置文件中列出 Load Balance&#xff08; LB&#xff1a;将用户的请求平摊的分配到多个服务上&a…

【C++】 Qt-事件(上)(事件、重写事件、事件分发)

文章目录 事件重写事件事件分发 事件 事件&#xff08;event&#xff09;是由系统或Qt本身在不同的时刻发出的。比如&#xff0c;当用户按下鼠标&#xff0c;敲下键盘&#xff0c;或窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件是在对用户操作做出响应…

Leetcode---351周赛

周赛题目 2748. 美丽下标对的数目 2749. 得到整数零需要执行的最少操作数 2750. 将数组划分成若干好子数组的方式 2751. 机器人碰撞 一、美丽下标对的数目 这题没什么好说的&#xff0c;按照题目的要求直接暴力求解&#xff0c;代码如下 bool gcd(int x,int y){if(x1||y1)…

钡铼技术多功能RTUS475:稳定可靠的油田数据采集解决方案

标题&#xff1a;S475在油田数据采集中的应用 摘要&#xff1a;本文介绍了钡铼技术多功能RTUS475在油田数据采集中的应用。该设备基于高性能微处理器MCU和嵌入式实时操作系统&#xff0c;支持Modbus Slave和Modbus Master功能&#xff0c;并能通过无线网络实现短信报警和数据传…

Springboot项目使用原生Websocket

目录 1.启用Websocket功能2.封装操作websocket session的工具3.保存websocket session的接口4.保存websocket session的类5.定义websocket 端点6.创建定时任务 ping websocket 客户端 1.启用Websocket功能 package com.xxx.robot.config;import org.springframework.context.a…

机器学习优化器和SGD和SGDM实验对比(编程实现SGD和SGDM)

机器学习优化器和SGD和SGDM实验对比 博主最近在学习优化器&#xff0c;于是呢&#xff0c;就做了一个SGD和SGDM的实验对比&#xff0c;可谓是不做不知道&#xff0c;一做吓一跳&#xff0c;这两个算法最终对结果的影响还是挺大的&#xff0c;在实验中SGDM明星要比SGD效果好太多…

springBoot配置多环境

在代码中一般有3个环境&#xff0c;为了避免频繁的每次上线需要手动更改环境的问题。 test 本地测试环境&#xff0c;代码调试的 dev 服务端开发环境-用来验证用 prod 服务端正式环境 我创建2个做示例&#xff0c;里面写的不同配置 点运行的项目会有一个Edit Configurations…

​浅谈大型语言模型

大型语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;是一类强大的人工智能模型&#xff0c;具有出色的自然语言处理能力。它们在许多任务中表现出色&#xff0c;如机器翻译、文本摘要、对话生成和情感分析等。下面我们将介绍大型语言模型的训练和生成过…

智谱AI-算法实习生(知识图谱方向)实习面试记录

岗位描述 没错和我的经历可以说是match得不能再match了&#xff0c;但是还是挂了hh。 面试内容 给我面试的是唐杰老师的博士生&#xff0c;方向是社交网络数据挖掘&#xff0c;知识图谱。不cue名了&#xff0c;态度很友好的 &#xff0c;很赞。 date&#xff1a;6.28 Q1 自…

【码银送书第一期】通用人工智能:初心与未来

目录 前言 正文 内容简介 作者简介 译者简介 目录 前言 自20世纪50年代图灵在其划时代论文《计算机器与智能》中提出“图灵测试”以及之后的达特茅斯研讨会开始&#xff0c;用机器来模仿人类学习及其他方面的智能&#xff0c;即实现“人工智能”&#xff08;Artificial …