react hooks

React Hooks面试题 React Hooks面试题整理 React 加入 Hooks 的意义是什么?为什么 React 要加入Hooks 这一特性? if else条件判断里使用hooks有什么问题 hooks闭包的坑有哪些?如何解决 常用的Hooks有哪些? useEffect为什么有时候会出现无限重复请求的问题 useEffect的依赖项里类数组根据什么来判断有没有值变化 React Hooks api的原理: React Hooks如何模拟组件生命周期? 模拟的生命周期和class中的生命周期有什么区 阅读详情

1.useMemo

具有缓存功能,可避免频繁的计算。(性能优化)

import React,{useState,useMemo,memo} from 'react';

const Demo = memo(function Child2(props){
    const transferGender= (gender)=>{
        return gender=='0' ?'男':'女';
    }
    const gender = useMemo(()=>
        transferGender(props.gender)
    ,[props.gender])
    return (
        <p>{gender}:{props.count}</p>
    )
})
export default Demo;

2.useCallBack

可以将父传子的函数保存起来,待下次组件渲染时不会重新渲染该函数(性能优化)

import React, {useState,useCallback} from "react";
import {View,Text,Button,StyleSheet} from 'react-native';
import Child1 from './Child1';

export default function CallBackHookDemo(){
    const [count,setCount] = useState(0);
    const [show,setShow] = useState(true);
    const increment2 = useCallback(()=>{
        console.log('执行increment2函数');
        setCount(count+1);
    },[count])
    return(
        <View style={styles.container}>
            <Text>CallBackHookDemo:{count}</Text>
            <Child1 increment={increment2}/>
            <Button title={'show切换'} onPress={(e) =>setShow(!show)}/>
        </View>
    )
}

3.useCallBackReducer

可以在dispatch的第二个参数放入一个回调函数,当状态更新完毕后会执行这个回调函数,回调函数的第一个参数是新的状态值,在函数体中可以进行逻辑操作。

/*
 * @Description:coderYYA
 * @Date: 2022-03-17 18:03:05
 * @LastEditTime: 2022-03-29 23:07:58
 * @FilePath: \test3\src\hooks\useCallBackReducer.js
 */

import { useEffect, useRef, useReducer } from 'react'

const useCallBackReducer = (reducer, initialState, deps) => {
	// 1、生成状态
	const [state, dispatch] = useReducer(reducer, initialState)
	// 2、使用一个持久化值记录回调函数
	const isUpdate = useRef()
	// 记录依赖,默认是监听全部状态值
	let watchEffect = [state]
	// 4、判断是否传入第三个参数,如果有且是数组,则进入分支
	if (Array.isArray(deps)) {
		if (deps.length) {
			// 4.1、数组具有长度,则将数组设置为依赖
			let newArr = []
			deps.forEach((item) => {
				newArr.push(state[item])
			})
			watchEffect = newArr
		} else {
			// 4.1、数组没有长度,则只在组件挂载时执行一次,意义不大
			watchEffect = []
		}
	}
	// 5、副作用函数,每次依赖数组中对应的状态更新后会执行回调函数
	useEffect(() => {
		//7、状态更新后会执行回调函数,在回调函数第一个参数可以获取到最新的状态
		if (isUpdate.current) {
			// 注:不设置回调函数的话,在第6步的时候,isUpdate.current 是undefined,不进入分支,所以不会执行回调函数
			isUpdate.current(state)
		}
	}, watchEffect)
	const setState = (action, cb) => {
		//6、劫持dispatch,将回调函数赋予isUpdate.current,再执行dispatch进行状态加工
		isUpdate.current = cb
		dispatch(action)
	}

	return [state, setState]
}

export default useCallBackReducer

4.useCallBackState

可以在setState的第二个参数放入一个回调函数,当状态更新完毕后会执行这个回调函数,回调函数的第一个参数是新的状态值,在函数体中可以进行逻辑操作。

// useState的回调版,
// 可以在第二个参数=>回调函数的第一个参数nextValue中拿到更新的state值,并在函数体中执行某些逻辑操作
// setState(
//     (preValue) => preValue + value,
//     (newValue) => {
//         逻辑操作
//     }
// )
 
import { useEffect, useRef, useState } from 'react'
const useCallBackState = (initState) => {
	const [state, setState] = useState(initState)
	const isUpdate = useRef()
	const setCallBackState = (state, cb) => {
		setState((preValue) => {
			isUpdate.current = cb
			return typeof state === 'function' ? state(preValue) : state
		})
	}
	useEffect(() => {
		if (isUpdate.current) {
			// 不设置回调函数的话 isUpdate.current 是undefined,所以不会执行
			isUpdate.current(state)
		}
	}, [state])
 
	return [state, setCallBackState]
}
 
export default useCallBackState

5.useRef + forwardRef + useImperativeHandle 

在父组件中 获取modal模态框的显示和隐藏事件

// 父组件

 
import React, { useRef } from 'react'
import YaForm from './Form'
import YaModal from '@/component/Modal'
import { Button } from 'antd'
const YaLogin = () => {
	const modalRef = useRef()
	const handleShowModal = () => {
		modalRef.current.showModal()
	}
	const handleCloseModal = () => {
		modalRef.current.closeModal()
	}
	return (
		<div>
			<Button type="primary" onClick={handleShowModal}>
				点击登录弹窗
			</Button>
			<YaModal
				ref={modalRef}
				title="登录窗口"
				children={<YaForm handleCloseModal={handleCloseModal} />}
			/>
		</div>
	)
}
 
export default YaLogin

// 子组件(modal模态框)

import React, { useState, forwardRef, useImperativeHandle } from 'react'
import { Button, Modal } from 'antd'
const YaModal = (props, ref) => {
	const [isModalVisible, setIsModalVisible] = useState(false)
	useImperativeHandle(ref, () => {
		return {
			showModal,
			closeModal,
		}
	})
	const showModal = () => {
		setIsModalVisible(true)
	}
	const closeModal = () => {
		setIsModalVisible(false)
	}
	const handleOk = () => {
		setIsModalVisible(false)
	}
 
	const handleCancel = () => {
		setIsModalVisible(false)
	}
	return (
		<div>
			<Modal
				title={props.title ? props.title : '弹出窗'}
				visible={isModalVisible}
				footer={props.footer ? true : false}
				onOk={handleOk}
				onCancel={handleCancel}
			>
				{props.children}
			</Modal>
		</div>
	)
}
 
export default forwardRef(YaModal)

6.useTitile

在SPA页面切换时更换标签的标题

import { useEffect } from 'react'

const useTitle = (title) => {
    useEffect(() => {
      document.title = title
    }, [])

    return
  }

export default useTitle

7.useContext 

实现最高或上一级组件向后代传递数据的hook

// 父组件生成 context
export const UserContext = createContext()
​
// 用 UserContext 包裹需要接受数据的子组件
<UserContext.Provider value={name:"孙悟空"}>
    <子组件/>
</UserContext.Provider>




// 子组件使用context
import React, { useState, useEffect, useContext } from 'react'
import { UserContext } from '../../APP.js'
​
export default function Recommend() {
    const userContext = useContext(UserContext)
    console.log(userContext)  //取得父组件传递的数据
​
​
    return (
        <div>
            <h2>{userContext.name}<h2>
        </div>
    )
}

React-Hooks 和 React-Redux React-Hooks 的 使用 React-redux 的 使用 阅读详情

相关推荐

VisionPro动态坐标系构建:CogFixtureTool与CogFixtureNPointToNPointTool实战解析

本文深入解析了VisionPro中动态坐标系构建的核心技术,重点对比了CogFixtureTool与CogFixtureNPointToNPointTool的原理与应用。通过实战案例,阐述了如何利用坐标跟随(Fixturing)技术解决工业视觉检测中因零件位置偏移导致的测量不准问题,实现从“固定”到“随动”的思维跃迁,从而构建稳定、精准的检测程序。

weixin_29207439的博客 563

react

五封面

caohongxia666的博客 1162

【算法】图解A* 搜索算法

A* 算法是启发式搜索算法,是根据Dijkstra算法改进而来。 问题引入 如下图所示,S为起始(start)节点,G为目标(goal)节点。 节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。 节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数,启发函数的设计有很多方法,具体可......

zhuhua造轮子的博客 4万+

【React】自定义封装 ant-design 弹窗

react 自定义封装 ant-design 弹窗,便捷使用

qq_45677671的博客 1319

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1085

一篇看懂 React Hooks

将之前对 React Hooks 的总结整理在一篇文章,带你从认识到使用 React Hooks。 什么是 React Hooks React Hooks 是 React 16.7.0-alpha 版本推出的新特性,想尝试的同学安装此版本即可。 React Hooks 要解决的问题是状态共享,是继 render-props 和 higher-order components 之后的第三种状态...

大灰狼的小绵羊哥哥的博客 4492

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 379

为什么useState可以使用const解构赋值?

为什么useState可以使用const解构赋值? 之前一直有一个问题困扰我,就是如下useState的数组解构赋值使用const进行声明? 下面是简单的ES6的数组解构赋值: //const声明的变量不能进行再次赋值,但可以对对象中的属性进行赋值 const [x,y]=[{a:1},3] x.a = 2 //success x={}//error 报错; y=4//error 报错; x--->{a:1} y--->3 使用React的useState Hook的标准方法如下: cons

weixin_45221036的博客 2324

Autosar MCAL-S32k324 Crypto配置-基于EB

NXP官网提供了免费的HSE固件,同时也提供了对应的协议栈。本文以算法为例,介绍MCAL相关的配置及在代码中的集成与使用。使用HSE计算,比软件算法确实方便许多。后面会完善更多的算法测试。

赞的博客 2436

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 408

React Hooks详解

React的函数式组件式本身是没有状态的和其他类似于class组件的功能,所以一开始,函数组件一般只作为容器组件存在,用来展示父级组件传入的值。而16.8之后出现的 hooks(钩子),打开了函数式组件的新大门。 useState 作用:用来记录函数式组件的状态。 使用方式: import React, { useState } from 'react' const [n, setN] = React.useState(0) 例子: import React, {useState} from

duansamve的博客 6332

YOLOv11改进 | Conv篇 | 2024最新轻量化自适应提取模块LAE助力边缘设备部署计算(附代码 + 修改教程 + 运行教程)

本文给大家带来的一个改进机制是最新由LSM-YOLO提出的轻量化自适应特征提取(Lightweight Adaptive Extraction, LAE)模块,其是LSM-YOLO模型中的关键模块,旨在进行多尺度特征提取,同时降低计算成本。LAE通过以下方式实现更有效的特征提取:多尺度特征提取、自适应特征提取。LAE模块可以在不增加额外参数的情况下提高了模型对ROI区域的检测性能。​欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍。

Snu77的博客 4056

ReactJS Hooks 总结

ReactJS Hooks 总结 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的

Mr_Four 557

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

React开发高级篇 - React Hooks以及自定义Hooks实现思路

初始状态(initialState):这是 state 的初始值。更新函数(setState):这是一个你可以调用以更新 state 的函数。当前状态(current state):这是 state 的当前值。更新函数(setState):用于更新 state 的函数。具体解释:useState 允许你在函数组件内部使用状态。这是通过将状态存储在组件的执行上下文中实现的,而不是像类组件那样存储在实例对象中。

qq_37779333的博客 1985

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深入浅出 React Hooks

React Hooks 是什么? Hooks 顾名思义,字面意义上来说就是 React 钩子的概念。通过一个 case 我们对 React Hooks 先有一个第一印象。 假设现在要实现一个计数器的组件。如果使用组件化的方式,我们需要做的事情相对更多一些,比如说声明 state,编写计数器的方法等,而且需要理解的概念可能更多一些,比如 Javascript 的类的概念,this 上下文的指向等...

大灰狼的小绵羊哥哥的博客 5232

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

react常用 Hooks

React Hooks 使得函数组件能够实现与类组件相同的功能,提供了更简单的 API 和更强大的功能。通过 useState、useEffect、useContext、useReducer、useMemo 和 useCallback 等 Hooks,你可以在函数组件中管理状态、处理副作用、使用上下文等,构建更复杂和高效的 React 应用。React Hooks 是 React 16.8 引入的一项功能,它允许你在函数组件中使用状态和其他 React 特性,而不需要编写类组件。• 缓存的计算结果。

be willing to share 1436

React中的Hooks

和。类组件可以使用state来管理内部状态,也能使用生命周期方法(如)来处理副作用。而函数组件是“无状态的”,它们只能接收props并返回JSX,无法拥有自己的状态和生命周期。简单来说,Hooks 让函数组件也能拥有和类组件几乎同等的能力,从此你可以在不编写 class 的情况下使用 state 和其他 React 功能。这使得函数组件成为现代React开发的首选。

2301_81253185的博客 1711

React Hooks

React Hooks 是 React 16.8 引入的功能,使函数组件能使用状态和生命周期等特性。它简化代码结构,提高复用性,替代类组件的复杂逻辑。核心 Hooks 包括:useState(状态管理)、useEffect(副作用处理)、useContext(跨组件数据传递)、useReducer(复杂状态逻辑)、useCallback/useMemo(性能优化)、useRef(DOM 操作)等。此外,开发者可创建自定义 Hooks 封装复用逻辑。Hooks 仅用于函数组件,使代码更简洁高效,同时保持 Re

likuoelie的博客 993

React Hooks中常用Hooks的用法详解

React Hooks中常用Hooks的用法详解

杨杨吖的博客 3939

React 之 Hooks

React Hooks 如 useState 和 useEffect 赋予函数组件状态与副作用处理能力,提升逻辑复用性与代码可维护性。理解纯函数、副作用及依赖数组机制,是掌握 Hooks 的关键。

2302_80706750的博客 1241

一文讲清楚React Hooks

React Hooks是React 16.8引入的新特性,允许在函数组件中使用状态和生命周期等特性。主要包括:1) useState管理组件状态;2) useEffect处理副作用操作;3) useContext共享上下文数据。其他常用Hooks还有useReducer处理复杂状态、useCallback和useMemo优化性能、useRef获取DOM引用。Hooks解决了类组件代码复用困难、逻辑分散等问题,使函数组件具备类组件的全部能力,同时提供更简洁的代码组织和更好的性能优化手段。

xiaobangkeji的博客 1324

深入了解 React Hooks API:自定义 Hooks 的魅力

Hooks 是 React 16.8 引入的一组 API,使得函数组件可以使用 state 和其他 React 特性。Hooks 的出现使得我们可以在函数组件中处理副作用、添加 state、处理组件生命周期等。他们不影响组件的结构,但提供了一种更加优雅和可组合的方式来管理组件逻辑。useStateuseEffectuseContext等等自定义 Hooks 是 React Hooks API 的一个强大特性。

有我更精彩的博客 1323

React Hooks 深入浅出

React Hooks 是 React 16.8 版本中引入的特性,它彻底改变了 React 组件的编写方式。在 Hooks 出现之前,我们需要使用类组件来管理状态和生命周期,而函数组件则被视为"无状态组件"。Hooks 的出现使得函数组件也能够拥有状态和生命周期功能,从而简化了组件逻辑,提高了代码的可读性和可维护性。

exlink2012的专栏 943

React React Hooks

React Hooks 是 React 提供的一组特殊的函数,它们在函数组件中实现了一些类组件特有的功能(如状态管理和生命周期方法)。在使用 Hooks 之前,函数组件是无状态的,类组件则具有完整的功能。而 Hooks 的引入打破了这种限制,使得函数组件变得功能强大且更为简洁。自定义 Hooks 是一个普通的 JavaScript 函数,名称以use开头,用于封装组件的状态逻辑。它使逻辑更加可复用和模块化。

Flying_Fish_roe的博客 1431
上一篇: useCallBackReducer
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值