React 个人笔记 Hooks编程

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

作用

配合函数式编程,保证在不产生类的时候完成一个整体的组件

常用组件

  1. useState
  2. useContext
  3. useReducer
  4. useEffect
  5. useMemo
  6. useCallback

前三个值为自变量
后三者为因变量

前三者相当于其他编程函数的变量声明,而后三者相当于对变量进行了(if now != previous)的包装,执行函数

useState

适用于:简单逻辑状态管理

//创建
const [state, setState] = useState(defaultState)

//直接修改
setState(nextState);
// 函数修改,会接收到一个参数是原先 state 的值,该函数的返回值将作为更新后 state 的值
setState(preState => nextState);

useReducer

用于处理更复杂的状态逻辑。相比于 useState,它更适合用于处理涉及多个子值的状态,或者下一个状态依赖于之前的状态的情况

// 定义初始状态
const initialState = { count: -1 };
//初始化函数
function init(initial) {
  // 确保初始计数值为正数
  return { count: Math.abs(initial.count) };
}
// 定义 reducer 函数
function counterReducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    case 'reset':
      return initialState;
    default:
      throw new Error();
  }
}
}

// 在组件中使用
function Counter() {
  const [state, dispatch] = useReducer(counterReducer, initialState, init);
  //第三个参数可以传入函数,这个函数允许你自定义初始化逻辑,而不是直接使用第二个参数 initialState作为初始状态(对第二个参数进行预处理,如取abs)。当你需要对初始状态进行一些计算或处理时

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>+1</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>-1</button>
      <button onClick={() => dispatch({ type: 'reset' })}>Reset</button>
    </div>
  );
}

·

useContext

和props的区别

  1. Props 是父组件向子组件传递数据的一种方式,从上往下传递,
  2. useContext 是一个 React Hook,允许你订阅 React 的 Context 对象。Context 提供了一种在组件之间共享数据的方式

作用
Props 主要用于父子组件之间的通信,而 useContext 解决了跨层级组件间的数据共享问题。如果组件层次较深,为了将某个 prop 从根组件传递到深层嵌套的组件,可能需要在每一层中间组件中“透传”这个 prop(即使这些中间组件并不使用该 prop),这被称为“prop drilling“ 使用useContext可以避免prop drilling
过度依赖 Context 可能导致不必要的重新渲染,因为它本质上是全局的。而 Props 则更细粒度,仅影响接收它们的组件

使用样例, 文件名为 ThemeContext.js,创造好了context,引用该文件后可以 useContext

import React, { createContext, useState, useContext } from 'react';

// 创建 ThemeContext
export const ThemeContext = createContext();

// 创建一个提供者组件来包裹需要访问 context 的组件树
export const ThemeProvider = ({ children }) => {
    const [theme, setTheme] = useState('light'); // 默认主题为 light

    const toggleTheme = () => {
        setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');
    };

    return (
        <ThemeContext.Provider value={{ theme, toggleTheme }}>
            {children}
        </ThemeContext.Provider>
    );
};
import React, { useContext } from 'react';
import { ThemeProvider, ThemeContext } from './ThemeContext'; // 假设文件名为 ThemeContext.js
import MiddleComponent from './MiddleComponent';

function App() {
    const { theme, toggleTheme } = useContext(ThemeContext);

    return (
        <ThemeProvider>
            <div className={`app ${theme}`}>
                <button onClick={toggleTheme}>
                    Toggle Theme
                </button>
                <MiddleComponent />
            </div>
        </ThemeProvider>
    );
}

export default App;
import React from 'react';
import DeeplyNestedComponent from './DeeplyNestedComponent';

function MiddleComponent() {
    return (
        <div>
            <h2>Middle Component</h2>
            <DeeplyNestedComponent />
        </div>
    );
}

export default MiddleComponent;
import React, { useContext } from 'react';
import { ThemeContext } from './ThemeContext'; // 假设文件名为 ThemeContext.js

function DeeplyNestedComponent() {
    const { theme } = useContext(ThemeContext);

    return (
        <div className={`deeply-nested-component ${theme}`}>
            <h3>Deeply Nested Component with {theme} theme</h3>
        </div>
    );
}

export default DeeplyNestedComponent;

useEffect

useEffect Hook 让你可以执行副作用操作(如数据获取、订阅或手动 DOM 操作),并根据指定的依赖项数组来决定何时重新执行副作用

  1. 无依赖项: 在组件每次渲染后执行。
  2. 空数组([]): 仅在组件挂载和卸载时执行
  3. 依赖项数组: 当数组中的任何值发生变化时,effect将会重新运行。
import React, { useState, useEffect } from 'react';

function Example() {
    const [count, setCount] = useState(0);
    useEffect(() => {
        console.log(`You clicked ${count} times`);
        return () => {
            // 清理函数
            console.log('清理工作');
        };
    }, [count]); // 只有 count 改变时触发(注意 初始化的时候也会加载一次

    return (
        <div>
            <p>You clicked {count} times</p>
            <button onClick={() => setCount(count + 1)}>
                Click me
            </button>
        </div>
    );
}

useMemo

useMemo Hook 用于记忆计算结果,避免重复计算。它接收一个创建函数和依赖项数组,只有当依赖项改变时才会重新计算返回值。

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

function computeExpensiveValue(a, b) {
    console.log("Performing expensive computation...");
    return a + b;
}

function Example({ a, b }) {
    const [count, setCount] = useState(0);
    const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

    return (
        <>
            <p>Memoized Value: {memoizedValue}</p>
            <p>Count: {count}</p>
            <button onClick={() => setCount(count + 1)}>Increase Count</button>
        </>
    );
}

useCallBack

seCallback Hook 与 useMemo 类似,用于记忆函数定义。优化性能,特别是当将回调函数作为 props 传递给子组件时,可以防止子组件重新渲染。

import React, { useState, useCallback } from 'react';

function ChildComponent({ onButtonClick }) {
    console.log("ChildComponent render");
    return <button onClick={onButtonClick}>Click Me!</button>;
    //即使父组件渲染,ChildComponent 接收到的 onButtonClick 回调不会改变, Click me Button不会重新渲染
}

function ParentComponent() {
    const [count, setCount] = useState(0);
    const handleClick = useCallback(() => {
        console.log("Button clicked");
    }, []); // 空数组意味着这个回调永远不会更新

    return (
        <>
            <ChildComponent onButtonClick={handleClick} />
            <p>Count: {count}</p>
            <button onClick={() => setCount(count + 1)}>Increase Count</button>
        </>
    );
}
Lumerical FDTD新手必看:从零开始搭建光子晶体仿真环境(附完整脚本) 本文为Lumerical FDTD新手提供光子晶体仿真环境的完整搭建指南,涵盖从基础参数设置到脚本编写的全流程。通过典型光子晶体带隙分析案例,详细讲解结构建模、仿真参数配置及后处理技巧,并附赠完整MATLAB脚本,帮助用户快速掌握FDTD仿真核心技术。 阅读详情

相关推荐

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 520

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

实战指南:CentOS 7下VOS3000 8.0从零部署到授权激活全流程

本文提供了一份详尽的CentOS 7系统下部署VOS3000 8.0的实战指南。从环境准备、使用FileZilla上传安装包、执行自动化安装脚本,到获取软件码、利用注册机生成授权文件并激活,手把手带领用户完成从零部署到投入商用的全流程,确保系统稳定运行。

zero1的博客 896

深入浅出 React Hooks

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

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

MPU6050模块DIY翻车实录:ID能读但数据全为零?原来是这个10uF电容惹的祸

本文详细记录了MPU6050模块调试过程中遇到的ID能读但数据全为零的问题排查过程。通过对比不同参考设计,发现CPOUT引脚10uF电容选择不当是导致数据异常的根源,更换为官方推荐的2.2nF电容后问题解决。文章为硬件开发者提供了宝贵的电路设计经验。

weixin_29158047的博客 319

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2803

React Hooks中常用Hooks的用法详解

React Hooks中常用Hooks的用法详解

杨杨吖的博客 3939

量化交易新手必看:如何用vnpy+Tushare轻松获取A股历史数据(附完整代码)

本文为量化交易新手提供了使用vnpy和Tushare构建A股历史数据获取系统的完整指南。通过详细的代码示例,手把手教你搭建环境、封装数据获取引擎,并实现日线等数据的格式转换与本地存储,为策略回测与分析奠定坚实的数据基础。

weixin_29098117的博客 378

React Hooks

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

likuoelie的博客 993

基于Gossip算法的柔性互联自治微网群分布式协调控制策略:复现代码与详细解释

摘要(149字): 本文基于Gossip算法实现了柔性互联微网群(MMG)的分布式协调控制策略仿真。研究构建了包含3个微网、10个分布式电源(DG)的MATLAB/Simulink模型,采用双层控制架构:上层通过柔性交流开关(FAS)实现微网间功率协调,下层利用Gossip算法完成DG间的边际成本一致性控制。重点开发了异步通信的Gossip算法核心函数,实现了分布式电源的自主边际成本估计与功率分配。仿真验证了系统在负荷变化和DG故障等工况下的协调控制能力,结果表明该策略能有效维持微网群的经济运行与功率平衡。

huanghm88的专栏 281

嵌入式系统开发笔记101:STM32CubeIDE安装过程中的2个错误及其解决方法

STM32CubeIDE在安装过程中,遇到了2个错误,本文阐述其解决方法。产生上述错误的原因,都在于中文。STM32CubeIDE不能很好的支持中文,所以在使用STM32CubeIDE进行项目设计的过程中,不要使用中文,包括项目所在的路径。

snmplink的博客 8558

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

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

qq_37779333的博客 1985

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

有我更精彩的博客 1323

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

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

VB摄像头监控

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

一文讲清楚React Hooks

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

xiaobangkeji的博客 1324

React React Hooks

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

Flying_Fish_roe的博客 1431

ReactJS Hooks 总结

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

Mr_Four 557

React为什么要使用Hooks?

【代码】React为什么要使用Hooks?

2401_89241768的博客 1182

React Hooks 深入浅出

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

exlink2012的专栏 943

React Hooks 核心规则&自定义 Hooks

自定义 Hooks 的核心价值是 “逻辑复用” 和 “代码拆分”,无论是公共操作的复用,还是业务组件内复杂逻辑的提取,都是其典型使用场景。具体来说,是否需要将逻辑放入自定义 Hooks,可从 “复用性” 和 “代码整洁度” 两个维度判断。

知识点沉淀包括不限于前端 1466

从React Hooks看React的本质

后jQuery时代的前端革命是由AngularJs发起的,它最初的一个想法是将后台的技术架构复制到前台来。后端的一个核心技术是所谓的模板技术(template)。它可以用一个公式来描述这是一个特别直观的想法:模板就是一个普通函数,它根据传入的变量信息(无特殊要求)拼接得到字符串(无特殊结构)。这一模型完全不需要考虑面向对象传统的状态分散管理的问题,基本上是一种函数式的解决方案。React的模式相当于是对模板渲染模型的一个。

canonical的博客 1006

浅析React Hooks原理

React Hooks 简介 React Hooks 是 React 16.8 以及之后版本的产物,React Hooks 就是一堆钩子函数,不同的钩子函数提供了不同的功能,React 通过这些钩子函数对函数型组件进行增强。Hooks 允许你在不编写 class 的情况下使用状态(state)和其他 React 特性。 你还可以构建自己的 Hooks, 跨组件共享可重用的有状态逻辑。 践行代数效应 React 核心成员 Sebastian Markbåge (Hooks 的发明者)曾说:我们在 React

weixin_50964668的博客 3023

什么是 Hooks,React Hooks简单使用

Hooks 译为钩子,Hooks 就是在函数组件内,负责钩进外部功能的函数。React 提供了一些常用钩子,React 也支持自定义钩子,这些钩子都是用于为函数引入外部功能。当我们在组件中,需要引入外部功能时,就可以使用 React 提供的钩子,或者自定义钩子。比如在组件内引入可管理 state 的功能,就可以使用 useState 函数,下文会详细介绍 useState 的用法。通过自定义 Hooks,可以将组件逻辑提取到可重用的函数中。名称以 “use” 开头;函数内部调用其他的 Hook。

马优晨 4868

react常用 Hooks

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

be willing to share 1436

视频教程-2019 react入门至高阶实战,含react hooks-ReactJS

2019 react入门至高阶实战,含react hooks 从事前端开发...

weixin_32052691的博客 673

手搓 AI Agent 02:让模型第一次“动手“——Agent Loop 与 ReAct

本系列第2篇实现Agent核心循环——ReAct模式,让模型从“被动回答”变为“主动执行”。通过LLMClient工具调用能力,构建think → act → observe闭环,首次实现模型自主调用计算器、读取结果并继续推理。代码支持安全算术、步数限制与错误隔离,升级终端REPL为可观察的智能体交互界面。每步操作清晰可见,为后续多工具、规划与协作打下基础。

快乐来自程序里 106
上一篇: Hive 知识点八股文记录 ——(三)区别和原理
下一篇: javascript个人笔记 闭包/this/解构赋值/模板字符串/模块化
JamSlade
博客等级 码龄6年 1万+粉丝 403原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值