React Hooks学习笔记

一、usestate的使用方法-初始化state函数

import React, { useState } from "react";
function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>点击{count}次</p>
      <button onClick={() => setCount(count + 1)}>点击</button>
    </div>
  )

运行效果图:

二、useEffect的使用方法-执行钩子函数的操作

import React, { useState, useEffect } from "react";
const [count,setCount] = useState(0);

  const btnClick = () =>{
    setCount(count + 1);
  }

  useEffect(() =>{
    console.log("执行了useEffect");
    document.title = '点击了{count}次'
  })

  return(
    <div>
      <p>点击{count}次</p>
      <button onClick = {() => { btnClick()}}>点击</button>
    </div>
  )

运行效果图:

三、useContext的使用方法-实现组件之间的共享

import React, { useContext, createContext } from "react"; 
const myContext = createContext();

  function App(){
    const value = useContext(myContext);
    return(
      <div>{value}</div>
    );
  }

  export default function MyComponent(){
    return(
      <myContext.Provider value={100}>
      <div>hello world</div>
      <App/>
      </myContext.Provider>
    );
  }

运行效果图:

四、useReducer的使用方法-把组件的所有状态更新逻辑整合到reducer这个函数中

import React, { useReducer } from "react";
function Counter(){
    const initState = {count: 0 };
    function reducer(state, action){
      switch(action.type){
        case 'increment':
          return { count: state.count + 1};
          case 'decrement':
            return {count: state.count - 1};
            default:
              return{ count: state};
      }
    }
    const [state,dispatch] = useReducer(reducer, initState);
    return(
      <div>
        <button onClick={() => dispatch({ type:'decrement'})}>减</button>
        <span>{state.count}</span>
        <button onClick={() => dispatch({ type:'increment'})}>加</button>
      </div>
    )
  }

  export default Counter;

运行效果图:

五、useMemo的使用方法-对数据的记忆,具有缓存功能,类似于Vue的计算属性

useMemo 接收2个参数,第1个参数为执行运算的函数,第2个参数为要监控的状态。

import React, {  useMemo } from "react";
function Counter(){
    const [count, setCount] = useState(0);
    const value = useMemo(function(){
      return count * 2;
    },[count]);//数组中的元素就是useMemo监控的状态
  return (
    <div>
      <h3>{count}</h3>
      <h3>{value}</h3>
      <button onClick={() => setCount(count + 1)}>按钮</button>
    </div>
  )
  }

  export default Counter;

运行效果图:

六、useRef的使用方法-获取组件中的 dom 对象

import React, { useRef  } from "react"; 
function App(){
    const refObj = useRef();
    console.log(refObj);
    function getRef(){
     console.log(refObj);     
    }
    return(
      <div>
        <div ref={refObj}>hello</div>
        <button onClick={getRef}>按钮</button>
      </div>
    );
  }
export default App;

运行效果图:

七、useCallback的使用方法-允许多次渲染中缓存数据,返回一个memoized回调函数,对函数的记忆

有2个函数,第一个参数是要缓存的函数,第二个参数是一个数组 (响应值变化时更新函数)

import React, { useCallback, memo   } from "react";
 function App(){
    const[count, setCount] = useState(1);
    const fn = useCallback(function (){
      return count;
    },[count]);
    return(
      <div>
        {count}
        <button onClick={() => setCount(count + 1)}>增加</button>
        <Heads fn={fn}></Heads>
      </div>
    );
  }

  const Heads = memo(function(props){
    return <button onClick={() =>console.log(`我被渲染了${props.fn()}次`)}>按钮</button>
  });
export default App;

运行效果图:

八、useImperativeHandle和forwardRef的使用方法

  1. useImperativeHandle-自定义由 ref 暴露出来的程序、数据或地址表等的入口地址,可应用于父组件访问子组件的场景。
  2. forwardRef-允许组件使用 ref 将一个 DOM 节点暴露给父组件
import React, {useRef,useImperativeHandle, forwardRef   } from "react"; 
function App(){
    const CounterRef = useRef();
    function click(){
      const { count, setCount } = CounterRef.current || {};
      setCount(count + 1);
    }
    return(
      <>
      <Counter ref={CounterRef}></Counter>
      <button onClick={click}>按钮</button>
      </>
    );
  }

  const Counter = forwardRef((props,ref) =>{
    const [count, setCount] = useState(0);
    useImperativeHandle(ref,() => ({ count, setCount }), [count]);
    return<>
    {count}
    </>
  });

export default App;

运行效果图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统】信号量(初次理解)

五个概念 多个执行流&#xff08;进程&#xff09;&#xff0c;能看到的一份资源&#xff1a;共享资源被保护起来的资源可以叫临界资源&#xff08;同步和互斥&#xff09; --- 用互斥的方式保护共享资源就叫临界资源互斥&#xff1a;任何时刻只能有一个进程在访问共享资源资源…

就业平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;企业管理&#xff0c;企业类型管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;简历&#xff0c;我的 …

SpringCloud--Eureka集群

Eureka注册中心集群 为什么要集群 如果只有一个注册中心服务器&#xff0c;会存在单点故障&#xff0c;不可以高并发处理所以要集群。 如何集群 准备三个EurekaServer 相互注册&#xff0c;也就是说每个EurekaServer都需要向所有的EureakServer注册&#xff0c;包括自己 &a…

游戏如何应对黑灰产工作室

游戏黑灰产工作室&#xff0c;是指以非法渠道、非法手段通过游戏进行牟利的团伙。使用脚本、外挂是黑灰产工作室的显著特征&#xff0c;其常见的牟利方式有&#xff1a;打金工作室、资源囤积号、初始号、自抽号、代练工作室以及营销欺诈等。 ▲ 常见的游戏黑灰产工作室牟利路径…

PMP证书 怎么报名?

首先&#xff0c;PMP证书相当于某些行业的敲门砖&#xff0c;身处项目管理相关行业的人应该清楚&#xff0c;这个证书&#xff0c;可能是你升职的不可或缺的一把钥匙。首先&#xff0c;我们先来了解一下什么是pmp。 1充分了解PMP PMP&#xff08;项目管理专业人士资格认证&am…

idm站点抓取可以用来做什么 idm站点抓取能抓取本地网页吗 idm站点抓取怎么用 网络下载加速器

在下载工具众多且竞争激烈的市场中&#xff0c;Internet Download Manager&#xff08;简称IDM&#xff09;作为一款专业的下载加速软件&#xff0c;仍然能够赢得众多用户的青睐&#xff0c;这都要得益于它的强大的下载功能。我们在开始使用IDM的时候总是有很多疑问&#xff0c…

「iOS」暑假第一周 —— ZARA的仿写

暑假第一周 ZARA的仿写 文章目录 暑假第一周 ZARA的仿写写在前面viewDidLoad 之中的优先级添加自定义字体下载想要的字体添加至info之中找到字体名字并应用 添加应用图标和启动页面 写在前面 暑假第一周留校学习&#xff0c;对于ZARA进行了仿写&#xff0c;在仿写的过程之中&a…

探索创意无限:独特的平面设计趋势与案例分享

随着平面设计领域的不断发展&#xff0c;平面设计趋势也在不断变化。在一个信息爆炸的时代&#xff0c;设计不仅仅是视觉的表达&#xff0c;更是思想和情感的交流。到了 2024 年&#xff0c;一些新的平面设计趋势已经开始显现&#xff0c;同时一些旧的趋势得到了新的发展和再度…

Jenkins安装部署与配置

目录 前言 Jenkins 的主要功能 Jenkins 的工作流程 一. 环境准备 二. 安装JDK 三. 安装Tomcat 四. 部署Jenkins 五. 浏览器访问 六. 修改超级管理员默认密码 七. 系统配置 八. 安装插件 九. 手动部署插件 前言 Jenkins 是一个开源的自动化服务器&#xff0c;用于…

C# 串口数据转网口实现空气风速风向检测

1.窗体搭建 添加time(定时器) 因为需要风速和风向自动刷新 2.进行网口空气检测 ①服务器连接按钮 // 连接按钮private void button1_Click(object sender, EventArgs e){if (button1.Text "连接"){ConnectSocke();// 连接服务器}else{CloseSocket(); // 关闭服务器…

苹果提出RLAIF:轻量级语言模型编写代码

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 代码生成一直是一个充满挑战的领域。随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;我们见证了在自然语言理解和生成方面的显著进步。然而&#xff0c;当涉及到代码生成&a…

XD文件打开神器:这个在线工具你一定要试试!

你有没有遇到过对设计师发来的XD文件没有头绪&#xff1f;不知道XD文件深层含义&#xff1f;如何打开XD文件最省时省力&#xff1f;这篇文章告诉你答案。 https://ad.js.design/online/xd/?sourcecsdn&planxy711 XD文件是什么&#xff1f; 事实上&#xff0c;XD文件就是…

C++入门基础篇(1)

欢迎大家来到海盗猫鸥的博客—— 断更许久&#xff0c;让我们继续好好学习吧&#xff01; 目录 1.namespace命名空间 命名空间的存在价值&#xff1a; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 2.C输入输出函数 使用&#xff1a; 3.缺省参数 4.函数重载…

界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强

随着最新的2024年第二季度发布&#xff0c;Kendo UI for React为应用程序开发设定了标准&#xff0c;包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示&#xff0c;从设计到代码的生产力增强、可访问性…

linux-5.10.110内核源码分析 - Freescale ls1012a pcie msi中断

1、dts msi控制器描述 1.1、dts描述 msi: msi-controller11572000 {compatible "fsl,ls1012a-msi";reg <0x0 0x1572000 0x0 0x8>;msi-controller;interrupts <0 126 IRQ_TYPE_LEVEL_HIGH>; };ls1012a msi控制器具体介绍可以参考官网手册”25.1.1 PC…

【cocos creator】2.x,伪3d拖拽,45度视角,60度视角,房屋装扮

伪3d拖拽,45度视角,60度视角 工程下载:(待审核) https://download.csdn.net/download/K86338236/89530812 dragItem2.t s import mapCreat2 from "./mapCreat2";const {ccclass, property } = cc._decorator; /*** 拖拽类,挂在要拖拽的节点上*/ @ccclass export…

电影购票小程序论文(设计)开题报告

一、课题的背景和意义 随着互联网技术的不断发展&#xff0c;人们对于购票的需求也越来越高。传统的购票方式存在着排队时间长、购票流程繁琐等问题&#xff0c;而网上购票则能够有效地解决这些问题。电影购票小程序是网上购票的一种新型应用&#xff0c;它能够让用户随时随地…

MacOS可以玩什么游戏 苹果笔记本电脑能打游戏吗 macbook能打什么游戏

长期以来&#xff0c;Mac电脑在游戏方面的局限性一直是用户关注的问题。在最新的 macOS Sonoma 14 系统中&#xff0c;苹果首次引入了全新的 Game mode&#xff08;游戏模式&#xff09;&#xff0c;将 M 系列芯片的超强能力在游戏中进一步释放&#xff01; Mac 不能玩游戏的难…

Fragment(未完结)

什么是Fragment? 1:具备生命周期,小Activity 2:必须委托在activity中才能运行 Fragment初体验 1、创建fragment_blank.xml <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools&qu…

一进四出学生公寓电表功能对比

一进四出学生公寓对比石家庄光大远通电气有限公司产品使用功能&#xff1a;预收费功能&#xff1a;用户应先到学校购电处购电,售电计算机将在十秒钟内自动将数据发送到控电柜各个用电单元,然后系统会给用户供电,当用户剩余电量为零时,系统可自动切断该单元供电,只有当用户重新购…