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

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;

运行效果图:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • redis源码分析之底层数据结构(一)-动态字符串sds
  • 【Git】取消追踪多个文件或目录
  • Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules。Android studio纯java代码报错
  • 使用Spring Boot和自定义缓存注解优化应用性能
  • Linux内存管理--系列文章柒——硬件架构
  • ELK集群搭建
  • 28个常用的损失函数介绍以及Python代码实现总结
  • React -- useState状态更新异步特性——导致获取值为旧值的问题
  • 前端工程化(01):10款自动化构建工具初识。
  • [GHCTF 2024 新生赛]ezzz_unserialize
  • 攻防世界 Web_python_template_injection(flask模版注入)
  • 网络安全应急响应信息收集利器-Eagle_Eye
  • Java中Collection集合和Map集合详解(进阶三)
  • sql注入之宽字节注入
  • WEB攻防-通用漏洞SQL注入-ACCESS一般注入与偏移注入
  • 《Java编程思想》读书笔记-对象导论
  • 【Amaple教程】5. 插件
  • CSS 提示工具(Tooltip)
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java的Interrupt与线程中断
  • Java面向对象及其三大特征
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Sublime text 3 3103 注册码
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 不上全站https的网站你们就等着被恶心死吧
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对象管理器(defineProperty)学习笔记
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 利用DataURL技术在网页上显示图片
  • 推荐一个React的管理后台框架
  • 异常机制详解
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • mysql面试题分组并合并列
  • Semaphore
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (07)Hive——窗口函数详解
  • (160)时序收敛--->(10)时序收敛十
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (三)c52学习之旅-点亮LED灯
  • (四)js前端开发中设计模式之工厂方法模式
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)为C# Windows服务添加安装程序
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ..回顾17,展望18
  • .md即markdown文件的基本常用编写语法
  • .net 中viewstate的原理和使用
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET应用架构设计:原则、模式与实践 目录预览
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ 转载 ] SharePoint 资料