Hook使用

使用Xposed对native进行hook 使用Xposed对native进行hook,Dobby框架的使用 阅读详情

Hook

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

React 组件更新逻辑

  • 在使用 Hook 前先要了解,React 组件在什么情况下会刷新

    1. state 或 props 有更新时,当前组件会刷新
    2. 父组件有更新时,当前组件会刷新
  • 但,从上面的情况看,其中有两个问题:

    1. 调用setState(),就会触发组件的重新渲染(无论前后的 state 是否一样,除非继承自PureComponent)
    2. 父组件更新,子组件也会自动的更新(无论子组件是否有必要更新)

Hook 除了能让函数组件使用一些类组件特性外,还自带一些性能优化,使函数组件发挥出强大的优势

Hook 使用注意事项

  1. 只能在函数组件中使用
  2. 不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层调用他们
  3. 函数组件每次更新都会从上往下执行完内部所有的代码

基础 Hook

1. useState

State Hook 能让函数组件也能使用 class 组件一样的状态特性,同时发挥函数组件轻便高效的特性,格式:useState(defaultValue),返回最新value与修改 value方法组成的数组

function MyComponent() {
  const [qty, changeQty] = useState(0);

  return (
    <div>
      {qty}
      <button
        onClick={() => {
          changeQty(qty + 1);
        }}
      >
        修改数量
      </button>
    </div>
  );
}

PS: 以前发起ajax请求只能在class组件中使用,有了useState,在函数组件中也能实现了,虽然每次更新qty都会把MyComponent组件中的代码重新执行一遍,但 State Hook 能保证你能拿到的是最新的state,如上面的代码每次都能拿到最新的qty值

2. useEffect

Effect Hook 可以让我们在函数组件中执行一些副作用操作,如 ajax 请求,定时器等。默认情况下,effect 将在每轮渲染结束后执行,React 保证了每次运行 effect 时,DOM 都已经更新完毕

  • 默认 effect

    等效于componentDidMount + componentDidUpdate的效果

        // 
        function MyCompnent(){
            useEffect(()=>{
                // 这里的代码在组件渲染结束后执行(初始化和组件更新)
                // 如:发起ajax请求商品数据
                const {data} = await fetch('/goods').then(res=>res.json())
            })
            return <div></div>
        }
    

    PS:ajax 请求以前在 class 组件中可能需要在componentDidMount和componentDidUpdate两个生命周期函数中编写相同的代码,有了useEffect,只需要写一次就行

  • 指定依赖

    等效于componentDidUpdate的效果,只有在依赖发生改变时才执行effect中的代码

        // 指定依赖(可以为多个依赖)
        function MyCompnent(){
          const [qty, changeQty] = useState(0);
            useEffect(()=>{
                // 这里的代码只有在初始化和qty发生改变时执行
                const {data} = await fetch('/goods').then(res=>res.json())
            },[qty])
            return <div></div>
        }
    
  • 指定空依赖

    依赖为空数组,等效于componentDidMount的效果

      function MyCompnent(){
          useEffect(()=>{
              // 这里的代码只有在初始化时执行
              const {data} = await fetch('/goods').then(res=>res.json())
          },[])
          return <div></div>
      }
    
  • useEffect返回一个函数

    实现componentWillUnmount的效果

        function MyComponent(){
            useEffect(()=>{
                return ()=>{
                    // 这里的代码在组件被销毁后执行
                }
            })
        }
    

3. useMemo

一般用于编写函数组件中无需重复执行的代码,以达到优化性能的目的,返回值为回调函数的结果

  • 执行过程
    1. 回调函数初始化组件时会被执行
    2. 依赖改变时被执行
  • 返回值:依赖改变返回新的值,否则返回缓存值
  const datalist = [
    { name: "goods1", price: 98, qty: 2 },
    { name: "goods2", price: 198, qty: 2 },
    { name: "goods3", price: 998, qty: 1 },
  ];

  function MyCompnent(){
    const [goodslist, changeGoods] = useState(datalist);

    // 只有goodslist有修改时才会重新计算总价,否则返回之前计算的值
    const totalPrice = useMemo(() => {
      return goodslist.reduce((pre, item) => pre + item.price * item.qty, 0);
    }, [goodslist]);
  }

4. useCallback

与 useMemo 类似,但 useCallback 返回传入的函数,不需要显性返回,一般用于定义事件处理函数

  • 不指定依赖

    不论初始化或者组件更新都返回新的函数

  • 指定依赖

    依赖更新时返回新的函数,否则返回缓存函数

  • 空依赖

    初始化返回函数后并缓存,组件更新时永远返回缓存函数

  const callbackList = []
  function MyCompnent(){
    const [qty, changeQty] = useState(1);

    // callback得到useCallback传入的函数
    const callback = useCallback(() => {
      
    }, [qty]);
    callbackList.push(callback);

    // 对比callbackList中的函数是否为同一个函数
  }

额外的 Hook

  1. useContext

简化context获取方式

  // 父组件
  const MyContext = React.createContext(null);
  <MyContext.Provider value={{ username: "laoxie", age: 18 }}>
    <MyComponent />
  </MyContext.Provider>
  // 子组件
  function MyCompnent() {
    const user = useContext(MyContext); // laoxie
    return <div>{user.username}</div>;
  }

useContext(MyContext) 相当于 class 组件中的 static contextType = MyContext 或者 <MyContext.Consumer>,当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染

  1. useReducer

简单版redux,可以在不引入redux的情况下使用redux特性

 const initState = [
   { name: "goods1", price: 98, qty: 2 },
   { name: "goods2", price: 198, qty: 2 },
   { name: "goods3", price: 998, qty: 1 },
 ];
 const reducer = (state, action) => {
   switch (action.type) {
     case 'add':
       return [action.goods, ...state];
     case 'remove':
       return state.filter(item => item.name != action.name);
     case 'change'
       return state.map(item=>{
         if(item.name === action.name){
           item.qty = action.qty;
         }
         return item;
       })
     default:
       throw new Error('type error');
   }
 }
 const MyHook = () => {
   const [state, dispatch] = useReducer(reducer, initState);
   return <div>
     <ul>
       {
         state.map(item=><li key={item.name}>{item.name}-{item.price}</li>)
       }
     </ul>
     <button onClick={()=>{
       dispatch({type:'add',goods:{name:'newGoods',price:111,qty:1}})
     }}>添加商品</button>
   </div>
 }

PS: 如果 Reducer Hook 的返回值与当前 state 相同,React 将跳过子组件的渲染及副作用的执行

  1. useRef
    useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数,返回的 ref 对象在组件的整个生命周期内保持不变。

  2. useLayoutEffect

  3. useImperativeHandle

  4. useDebugValue

自定义 Hook

自定义 Hook 是一个函数,其名称以 use 开头,这样可以一眼看出其符合 Hook 的规则

  • 函数内部可以调用其他的 Hook
  • 自定义 Hook 解决了以前在 React 组件中无法灵活共享逻辑的问题
	import {useState,useMemo} from 'react';
	function useStorage(key){
		function set(key,val){
			localStorage.setItem(key,JSON.stringify(val));
			setValue(val)
		}
		function get(key){
			return JSON.parse(localStorage.getItem(key));
		}
		const initData = get(key);
		const [value,setValue] = useState(initData);
		return [value,set]
	}

第三方HooK

  • react-router
    • useHistory
    • useLocation
    • useParams
    • useRouteMatch
  • react-redux

    react-redux 7.1新增功能

    • useDispatch
    • useStore
    • useSelector
EDA与机器学习融合:智能优化芯片设计流程的工程实践 机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文 阅读详情

相关推荐

大象机器人myAGV移动机器人+mechArm六轴机械臂,开源复合机器人开发与实践!

我们这章节的内容是将协作性机械臂打破距离上的限制,跟移动机器人(myAGV)相连接,实现一个案例。

m0_71627844的博客 1487

Hooks的使用

作用:在函数组件中使用state以及其他的React特性常用的hook:React.useState()、React.useEffect()、React.useRef()

S2763427717的博客 225

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码)

本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。

weixin_32678995的博客 603

手把手讲解 Android Hook入门Demo

前言 手把手讲解系列文章,是我写给各位看官,也是写给我自己的。文章可能过分详细,但是这是为了帮助到尽量多的人,毕竟工作5,6年,不能老吸血,也到了回馈开源的时候.这个系列的文章:1、用通俗易懂的讲解方式,讲解一门技术的实用价值2、详细书写源码的追踪,源码截图,绘制类的结构图,尽量详细地解释原理的探索过程3、提供Github 的 可运行的D...

weixin_33889665的博客 950

Matt Pocock Skills — AI 编码代理技能包介绍与使用指南

《Matt Pocock Skills:AI编码代理技能包指南》 摘要: Matt Pocock Skills是一套开源AI编码代理技能包,旨在解决AI辅助开发中的四大痛点:需求理解偏差、token浪费、代码质量差和架构腐化。该技能包包含多种实用工具:/grill-with-docs用于需求对齐,/tdd实现测试驱动开发,/diagnose提供规范化调试流程,/triage管理issue生命周期。核心思想包括:通过拷问式对齐确保需求理解一致,建立共享领域语言提高沟通效率,快速反馈闭环加速开发,以及持续架构维

qq_45859163的博客 2221

DDR5内存命令真值表详解:如何正确解析JESD79-5标准中的关键指令

本文深度解析JESD79-5标准中的DDR5内存命令真值表,将其视为动态通信协议进行拆解。详细阐述了1-Cycle与2-Cycle命令的区别、Bank Group寻址机制以及模式寄存器(MR)操作流程,为硬件与固件工程师提供了从信号解析到系统调试的完整实战指南,是理解和优化高性能计算平台内存子系统的核心。

numpy6sculptor的博客 548

HOOK的使用

一些HOOK的常用方法

garfield的博客 930

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1133

Python中的钩子函数(hooks)介绍使用

python钩子函数的使用、注意事项

zpsimon的博客 5241

玩转Docker小游戏项目系列: Docker部署中国象棋网页小游戏

玩转Docker小游戏项目系列: Docker部署中国象棋网页小游戏

jks212454的博客 439

Vue/React动态页面爬取:不用Playwright也能抓全数据的3个JS逆向技巧(附Python代码)

Vue/React动态页面的爬取核心是“绕过渲染,直达数据”:90%的场景下,API接口或初始数据足以满足需求,Playwright等渲染工具只应作为“最后手段”(如无API、参数加密极复杂)。记住:爬虫的效率与“模拟真实浏览器的程度”成反比——越少模拟浏览器,效率越高。掌握JS逆向技巧,既能避开Playwright的性能坑,又能提升爬虫的抗反爬能力,这才是动态页面爬取的最优解。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1597

油猴插件hook的基本用法(非常详细)

首先下载油猴插件,进行一些初始配置其中我们可以在里面加上一个参数@run-at编辑好hook代码之后,直接命名好,保存并开启就好啦!就像这样。

2302_80729149的博客 1406

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

React中Hook的使用

1.什么是Hook? Hook是React 16.8的新增属性。可以在不编写calss的情况下使用state以及其他的React特性 2.Hook优势? 其主要是为了解决一下几个常见问题: 在组件之间服用状态逻辑难 复杂组件变的难以理解 class学习及js中this的工作方式 简化周期函数,避免重复代码 … Hook可以让我们无需学习浮躁的函数式和响应式编程,同时也遵循React的精神原则。...

WCBandCTZ的博客 2058

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Hook使用介绍

6.自定义hook 通过自定义hook,可以将组件逻辑提取到可重用的函数的。 到目前为止,在react中两种方式来共享组件组件之间的状态逻辑;render props和高阶组件,Hook可以让你在不增加组件的情况下解决相同问题。 提取自定义Hook ...

LiHUi__优快云的博客 2497

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

React hook 10种 Hook (详细介绍及使用)

React Hook是什么? React官网是这么介绍的: Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 完全可选的 你无需重写任何已有代码就可以在一些组件中尝试 Hook。但是如果你不想,你不必现在就去学习或使用 Hook。 100% 向后兼容的 Hook 不包含任何破坏性改动。 现在可用 H...

@baby张~的博客 1万+

react中关于hook介绍及其使用

前言 最近由于公司的项目开发,就学习了在react关于hook的使用,对其有个基本的认识以及如何在项目中去应用hook。在这篇博客中主要从以下的几个点进行介绍: hook简介 hook中常用api的使用 hook在使用过程中需要去注意的地方 hook中怎样去实现class组件中的声明周期函数 hook 首先介绍关于hook1的含义,以及其所要去面对的一些场景 含义:Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。简

domino~~的博客 4322

Net使用Hook之完全介绍

Net使用Hook之完全介绍待续。。

老桥的技术家园 3014

React Hook 的使用限制有哪些?

这些限制主要是为了保证React能正确地追踪各个Hook之间的状态。为了帮助开发者遵守这些规则,React团队提供了一个ESLint插件:eslint-plugin-react-hooks,这个插件可以帮助检测你的代码是否违反了这些规则。:不要在普通的JavaScript函数中调用Hook。你可以在React的函数组件中调用Hook,也可以在你的自定义Hook中调用其他Hook。:当你想在两个函数间共享一些状态逻辑时,你可以创建你自己的自定义Hook,然后在那里调用其他的Hook。

csdn_Levy的博客 466

react hook 使用规则

Hook 规则 Hook是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 Hook 本质就是 JavaScript 函数,但是在使用它时需要遵循两条规则。我们提供了一个linter 插件来强制执行这些规则: 只在最顶层使用 Hook 不要在循环,条件或嵌套函数中调用 Hook,确保总是在你的 React 函数的最顶层调用他们。遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用。这让 React ...

wx479的博客 1540

pytorch中hook的使用

在pytorch中,可以利用Hook获取、改变网络中间某一层变量的值和梯度,从而便捷地分析网络,而不用专门改变网络结构。 一、torch.Tensor中的hook 在使用pytorch时,只有叶节点(即直接指定数值的节点,而不是由其他变量计算得到的节点,比如网络输入)的梯度会保留,其余中间节点梯度在反向传播完成后就会自动释放以节省显存。 比如: import torch x=torch.Tensor([1,2]).requires_grad_(True) y=torch.Tensor([3,4]).req

kking_edc的博客 776

JS Hook 基本使用

JS Hook 基本使用

LI4836的博客 3115

Vue的hook的使用?

Vue Hook是组合式API的核心,分为内置Hook(如onMounted、watch)和自定义Hook(以use开头命名)。内置Hook用于生命周期管理和响应式操作,自定义Hook可实现逻辑复用(如useRequest请求封装)。相比Vue2的mixins,Hook具有逻辑隔离、类型安全等优势。使用时需注意:只能在setup中调用、命名规范、避免响应式丢失、及时清理资源。Vue Hook基于响应式依赖追踪,比React Hooks使用更简便。

854

TypeScript 中使用React Hook

从 React V 16.8.0 和 React Native 0.59.0 版本开始, 引入了React Hook的概念。React Hook 在开发支持就考虑到了类型,所以很多Hook函数可以直接推断出他们的参数、返回值等类型,但也有一些场景需要我们显示声明类型。阅读本文前你需要了解React Hook 的基本用法,参考这里。下面会总结一下我们如何在 TypeScript 中使用React H...

大前端码农的博客 4316

React Hook的使用

前言 JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架。但各有优缺点,本文将详细对比两大框架 目录前言一、React Hook是什么?二、React目前提供的Hook三、Hook的使用1、useState2、useEffect & useLayoutEffect3、useMemo & useCallback4、useRef5、useContext6、useReducer四、hooks使用禁忌五、总结 一、React Hook是什么? 二、React目前提

程序员良仔 639

如何使用Frida在Android上进行hook

前言 我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件。而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同的是它依然需要root环境。本文就以Android为例来详细说说如何安装并使用它。 PC端 首选要在电脑上安装Frida,官方的安装步骤是

公众号:BennuCTech 5750

hook中ref使用

hook使用ref 父组件: 引入 useRef 声明ref的名字 const dateRef = useRef() 复值给组件 ref={dateRef} 使用 dateRef...

weixin_33842328的博客 8580
下一篇: 关于promise,以及请求优化
luofei_create
博客等级 码龄6年 3万+粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值