React学习(二)-变量

也是很无聊,竟然写这玩意,毕竟不是学术研究,普通工作没那么多概念性东西,会用就行╮(╯▽╰)╭
在React中,变量是用于存储和管理数据的基本单位。根据其用途和生命周期,React中的变量可以分为以下几类:


1. 状态变量(State)

  • 用途:用于存储组件的内部状态,状态变化会触发组件的重新渲染。
  • 定义方式
    • 函数组件:使用useState钩子。
      const [count, setCount] = useState(0);
      
    • 类组件:使用this.statethis.setState
      class MyComponent extends React.Component {state = { count: 0 };render() {return <div>{this.state.count}</div>;}
      }
      
  • 特点
    • 状态是组件私有的,外部无法直接访问。
    • 更新状态需要使用特定的方法(如setCountthis.setState)。

2. 属性变量(Props)

  • 用途:用于从父组件向子组件传递数据。
  • 定义方式
    • 父组件传递:
      <ChildComponent name="John" age={25} />
      
    • 子组件接收:
      function ChildComponent(props) {return <div>{props.name}, {props.age}</div>;
      }
      
  • 特点
    • Props是只读的,子组件不能直接修改。
    • 可以通过defaultProps设置默认值。

3. 局部变量

  • 用途:在函数或组件内部定义的临时变量,用于存储中间数据。
  • 定义方式
    function MyComponent() {const message = "Hello, World!";return <div>{message}</div>;
    }
    
  • 特点
    • 局部变量的生命周期仅限于函数或组件的执行过程。
    • 不会触发组件的重新渲染。

4. 上下文变量(Context)

  • 用途:用于在组件树中跨层级传递数据,避免逐层传递Props。
  • 定义方式
    • 创建上下文:
      const MyContext = React.createContext();
      
    • 提供上下文值:
      <MyContext.Provider value={{ theme: "dark" }}><ChildComponent />
      </MyContext.Provider>
      
    • 使用上下文值:
      function ChildComponent() {const context = useContext(MyContext);return <div>{context.theme}</div>;
      }
      
  • 特点
    • 适用于全局或共享数据的场景。
    • 避免“Props Drilling”问题。

5. Ref变量(Refs)

  • 用途:用于直接访问DOM元素或存储可变值,且不会触发重新渲染。
  • 定义方式
    • 使用useRef钩子:
      const inputRef = useRef(null);
      
    • 绑定到DOM元素:
      <input ref={inputRef} />
      
    • 访问DOM元素:
      inputRef.current.focus();
      
  • 特点
    • Ref的值在组件重新渲染时保持不变。
    • 适用于需要直接操作DOM的场景。

6. 全局变量

  • 用途:在组件外部定义的变量,可以在多个组件中共享。
  • 定义方式
    const globalVar = "This is a global variable";
    
  • 特点
    • 全局变量的生命周期与应用程序一致。
    • 不推荐过度使用,可能导致代码难以维护。

7. 计算变量(Derived State)

  • 用途:基于状态或属性计算得出的变量。
  • 定义方式
    const total = count * price;
    
  • 特点
    • 通常用于根据现有状态或属性生成新的数据。
    • 避免在状态中存储冗余数据。

8. 模块变量

  • 用途:在模块中定义的变量,可以在模块内的多个组件中共享。
  • 定义方式
    // module.js
    export const moduleVar = "This is a module variable";
    
  • 特点
    • 模块变量的作用域仅限于当前模块。
    • 适用于模块内共享数据的场景。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整卸载 Fabric Manager 的方法

目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖&#xff08;可选&#xff09; 4️⃣ 检查是否卸载成功 ✅ 补充&#xff08;仅清除服务&#xff0c;不删包&#xff09; ✅ 完整卸载 Fabric Mana…

ABP vNext 多租户开发实战指南

&#x1f680; ABP vNext 多租户开发实战指南 &#x1f6e0;️ 环境&#xff1a;.NET 8.0 ABP vNext 8.1.5 (C# 11, EF Core 8) &#x1f4da; 目录 &#x1f680; ABP vNext 多租户开发实战指南&#x1f3e0; 一、什么是多租户&#xff1f;&#x1f4e6; 二、ABP 多租户的核…

【WIN】笔记本电脑忘记密码解决办法/笔记本电脑重装系统笔记/bitlocker忘记密码的解决办法

通过安全模式下的CMD命令找回 具体的步骤就是&#xff1a; 首先通过笔记本的对应的一个进入安全模式的一个方式 进入安全模式之后&#xff0c;一直点着这个诊断&#xff0c;然后高级选项进去就可以看到了。 但是这种方法应该是属于安全漏洞&#xff0c;所以只适合老版本。如果是…

人工智能100问☞第25问:什么是循环神经网络(RNN)?

目录 一、通俗解释 二、专业解析 三、权威参考 循环神经网络(RNN)是一种通过“记忆”序列中历史信息来处理时序数据的神经网络,可捕捉前后数据的关联性,擅长处理语言、语音等序列化任务。 一、通俗解释 想象你在和朋友聊天,每说一句话都会根据之前的对话内容调整语气…

实验八 基于Python的数字图像问题处理

一、实验目的  培养利用图像处理技术解决实际问题的能力。  培养利用图像处理技术综合设计实现的能力。  掌握在Python环境下解决实际问题的能力。  熟练掌握使用cv2库对图像进行处理  熟练掌握使用区域生长法提取图片中感兴趣的区域 二、实验内容 本次实验内容为…

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…

TCVectorDB 向量数据库简介

简介 尽管目前大多数开源向量数据库来自海外&#xff0c;配置简单且性能优异&#xff0c;但由于网络原因&#xff0c;如果向量数据库部署在海外&#xff0c;而产品面向国内市场&#xff0c;网络延迟将是必须考虑的问题。因此&#xff0c;选择国内服务提供商的云向量数据库往往是…

力扣-比特位计数(统计一个数二进制下1的个数)

下面是题面 1.用c的内置函数__builtin_popcount&#xff08;&#xff09; 语法&#xff1a;__builtin_popcount&#xff08;int x&#xff09;&#xff0c;函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法&#xff0c;写法也很简单 用一个while循环…

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块 一、包1. **什么是 Crate&#xff1f;**2. **Crate 的类型**3. **Crate 的结构**4. **使用 Crate**5. **创建和管理 Crate**6. **发布 Crate**7. **Crate 的优势**8. **示例**创建一个 library crate 二、单元…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

【大数据知识】今天聊聊Clickhouse部署方案

ClickHouse部署 一、ClickHouse部署一、单节点部署1. 安装准备2. 目录规划3. 核心配置4. 启动服务 二、集群部署方案1. 集群拓扑设计2. 分布式配置3. 表引擎选择 三、安全加固1. 认证配置2. SSL加密 四、性能优化1. 核心参数调优2. 资源隔离 五、监控与维护1. Prometheus 集成2…

打卡Day28

题目1&#xff1a;定义圆&#xff08;Circle&#xff09;类 要求&#xff1a; 1.包含属性&#xff1a;半径 radius。 2.包含方法&#xff1a; ●calculate_area()&#xff1a;计算圆的面积&#xff08;公式&#xff1a;πr&#xff09;。 ●calculate_circumference()&#xff…

BERT 进阶:Albert 模型详解与实战

目录 BERT 进阶&#xff1a;Albert 模型详解与实战 一、ALBERT 的优化策略 &#xff08;一&#xff09;Embedding 参数因式分解 &#xff08;二&#xff09;跨层参数共享 &#xff08;三&#xff09;巨剑连贯性损失 二、ALBERT 模型架构 &#xff08;一&#xff09;Tran…

使用 163 邮箱实现 Spring Boot 邮箱验证码登录

使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器&#xff0c;实现 Spring Boot 项目中的邮件验证码发送功能&#xff0c;并解决常见配置报错问题。 一、为什么需要邮箱授权码&#xff1f; 出于安全考虑&#xff0c;大…

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中&#xff0c;安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将结合Spring Boot&#xff0c;详细介绍如何集成Spring Se…

C#将1GB大图裁剪为8张图片

C#处理超大图片&#xff08;1GB&#xff09;需要特别注意内存管理和性能优化。以下是几种高效裁剪方案&#xff1a; 方法1&#xff1a;使用System.Drawing分块处理&#xff08;内存优化版&#xff09; using System; using System.Drawing; using System.Drawing.Imaging; us…

Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD

目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd&#xff08;Initial RAM Disk&#xff09; 2、initramfs&#xff08;Initial RAM Filesystem&#xff09; 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…

AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理

如果你正在使用 AIStarter 工具进行本地 AI 模型部署 &#xff0c;那么这条消息对你来说非常重要&#xff01; 在最新推出的 AIStarter Windows 正式版更新中 &#xff0c;官方对整个平台进行了功能重构和性能优化&#xff0c;尤其是新增了「模型插件工作流 」功能&#xff0c…

深入理解桥接模式:解耦抽象与实现的设计艺术

一、为什么需要桥接模式&#xff1f;从“类爆炸”问题说起 你是否遇到过这样的开发困境&#xff1f; 当需要为系统扩展新功能时&#xff0c;继承体系像滚雪球一样越变越臃肿&#xff1a;新增一种遥控器类型&#xff0c;需要为电视、音响各写一个子类&#xff1b;新增一种设备类…

Java 中的泛型原理与实践案例

引言&#xff1a;为什么需要泛型 在Java 5之前&#xff0c;集合类只能存储Object类型的对象&#xff0c;这带来了两个主要问题&#xff1a; 类型不安全&#xff1a;可以向集合中添加任何类型的对象&#xff0c;容易出错繁琐的类型转换&#xff1a;从集合中取出元素时需要手动…