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

nodejs 020: React语法规则 props和state

props和state

在 React 中,propsstate 是管理数据流的两种核心机制。理解它们之间的区别和用途是构建 React 应用程序的基础。

一、props 和 state的区别

特性propsstate
定义方式由父组件传递给子组件的数据组件内部管理的本地数据
是否可修改不可变(只读)可变(可以使用 setStateuseState 修改)
数据流向单向(从父组件流向子组件)组件自身内部使用
用途用于在组件之间传递数据用于存储和管理组件内部的动态数据
是否触发重新渲染变更会触发子组件重新渲染更新状态会触发组件重新渲染

二、props(属性)

1. props 是什么?

  • props 是父组件传递给子组件的数据
  • 它们是只读的,子组件不能直接修改 props

2. props 的示例

// 子组件
import React from 'react';function Child(props) {return <h1>{props.message}</h1>;
}export default Child;
// 父组件
import React from 'react';
import Child from './Child';function Parent() {return <Child message="Hello, React!" />;
}export default Parent;
  • 页面上会显示 Hello, React!

在这里插入图片描述

三、state(状态)

1. state 是什么?

  • state 是组件内部维护的数据,用于存储组件的动态信息。
  • state 发生变化时,React 会重新渲染组件。

2. state 的示例

import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);const increment = () => setCount(count + 1);return (<div><p>Count: {count}</p><button onClick={increment}>Increment</button></div>);
}export default Counter;
  • 每次点击按钮时,计数器会增加 1,页面会自动更新。

3. state 的用法

  • 适合用来存储和管理组件内部的可变数据
  • 使用 React 的 useState Hook 或类组件的 this.setState 方法来更新 state
  • setObj必须传入一个新的对象(可使用对象解构管理复杂状态):
    • 不直接修改状态(例如,不能使用 push、splice、sort 等会直接修改数组的方法)。
    • 使用不可变操作(例如 map(更新)、filter(删除)、concat、展开运算符 … 等)创建新数组。
    • 避免在 useState 中更新嵌套对象时出现副作用,确保始终返回新的对象或数组引用。
import React, { useState } from 'react';function UserProfile() {const [user, setUser] = useState({ name: '', age: 0, email: '' });const handleChange = (e) => {const { name, value } = e.target;setUser({ ...user, [name]: value });};return (<div><input type="text" name="name" placeholder="Name" value={user.name} onChange={handleChange} /><input type="number" name="age" placeholder="Age" value={user.age} onChange={handleChange} /><input type="email" name="email" placeholder="Email" value={user.email} onChange={handleChange} /><h2>User Info</h2><p>Name: {user.name}</p><p>Age: {user.age}</p><p>Email: {user.email}</p></div>);
}export default UserProfile;

四、propsstate 的组合使用

  • 通常情况下,React 应用程序是通过 父组件管理数据,将其通过 props 传递给子组件,而子组件通过事件回调将数据更改传回父组件。这种模式确保了数据流是单向的,使得应用程序更加易于调试和维护。

示例:父子组件通信

import React, { useState } from 'react';function Parent() {const [message, setMessage] = useState("Hello from Parent");const updateMessage = () => {setMessage("Message updated!");};return (<div><Child message={message} /><button onClick={updateMessage}>Update Message</button></div>);
}function Child({ message }) {return <h1>{message}</h1>;
}export default Parent;
  • 父组件 Parent 通过 propsmessage 传递给子组件 Child
    在这里插入图片描述

  • 点击按钮后,父组件会更新其 state,从而触发 Child 重新渲染。
    在这里插入图片描述

CG

  • useState是异步的,可能会结果合并
  • 如果一个变量不用于JSX中显示,考虑使用useReference而非useState
  • ?用于处理可选的属性类型, ?.可选链操作符(可选链操作符是在 Node.js 14.x 及以上版本中引入的)
  • 使用immer可变数据替换state
  • 状态提升适合在局部组件树中共享状态,而不是整个应用程序。
  • 如果需要在整个应用中共享状态,或状态过于复杂,则可以考虑使用 React Context全局状态管理工具(如 Redux、Zustand 等)

相关文章:

nodejs 020: React语法规则 props和state

props和state 在 React 中&#xff0c;props 和 state 是管理数据流的两种核心机制。理解它们之间的区别和用途是构建 React 应用程序的基础。 一、props 和 state的区别 特性propsstate定义方式由父组件传递给子组件的数据组件内部管理的本地数据是否可修改不可变&#xff…...

STM32问题集

这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…...

SwiftUI(十二)- 容器组件 布局与结构的基石

引言 在用户界面开发中&#xff0c;布局是设计一个应用程序的视觉层次和交互体验的核心之一。无论是设计简单的按钮排布&#xff0c;还是复杂的多层次页面&#xff0c;合理的布局和结构可以极大地提升用户体验。而容器组件&#xff0c;作为将多个视图整合、组织、排列的工具&a…...

想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)

各位小伙伴们大家好~ 不知道各位同学在科研过程中是否有这样的苦恼 电脑无显卡。难不成我要用CPU跑实验吗&#xff1f;救救我吧电脑显卡算力太低。训练过程慢慢慢慢慢&#xff0c;等半天都出不来结果电脑显卡显存不够&#xff0c;batchsize稍微高一点点&#xff0c;就要爆显存…...

LeetCode【0039】组合总和

本文目录 1 中文题目2 求解方法&#xff1a;回溯法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#…...

AscendC从入门到精通系列(一)初步感知AscendC

1 什么是AscendC Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。基于Ascend C编写的算子程序&#xff0c;通过编译器编译和运行时调度&#xff0c;运行在昇腾AI处理器上。使用Ascend C&#xff0c;开发者…...

PostgreSQL中的COPY命令:高效数据导入与导出

在PostgreSQL数据库中&#xff0c;数据导入和导出是日常工作中常见的操作。传统的插入&#xff08;INSERT&#xff09;方法虽然可以实现数据的导入&#xff0c;但在处理大量数据时效率较低。而COPY命令则提供了一个快速、高效的方式来完成这一任务。COPY命令不仅可以用于将数据…...

【HAL库】STM32F105VCTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现

相关代码编写 配置好后点击生成代码&#xff0c;在生成代码的adc.c文件中的初始化函数MX_ADC1_Init中添加如下代码&#xff1a; HAL_ADCEx_Calibration_Start(&hadc1); /* 校准ADC */HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,ADC_DMA_…...

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935...

vue3中查找字典列表中某个元素的值对应的列表索引值

vue3中查找字典列表中某个元素的值对应的列表索引值 目录思路方法代码实现示例解释说明 目录 思路方法 要获取字典列表中某个元素的值对应的列表索引值&#xff0c;可以使用数组的 findIndex 方法。这个方法返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到&am…...

爱普生机器人EPSON RC

爱普生机器人Epson RC系列&#xff0c;搭配其专用的Epson RC编程语言和软件环境&#xff0c;为用户提供了一个直观且功能强大的机器人控制和编程解决方案。以下是对Epson RC及爱普生机器人的一些详细介绍&#xff1a; Epson RC 定义&#xff1a;Epson RC 是爱普生机器人技术中…...

Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)

1.Linux的背景介绍 Linux 操作系统的发展历程充满了激情与创新喵&#xff5e;&#x1f380; 萌芽期 (1983 - 1991)&#xff1a;Linux 的历史可追溯到 1983 年&#xff0c;理查德斯托曼 (Richard Stallman) 发起 GNU 计划&#xff0c;目标是创建一个自由软件操作系统。1987 年发…...

❤React-JSX语法认识和使用

1、JSX基本使用​ JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因&#xff1a; React生态系统支持&#xff1a; 脚手架通常用于构建React应用程序&#xff0c;而JSX是React框架的核心语法之一。因此&#xf…...

51单片机应用开发(进阶)---定时器应用(电子时钟)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、功能1&#xff1a;&#xff08;1&#xff09;简单显示时间。显示格式&#xff1a;88-88-88&#xff08;时-分-秒&#xff09; 4、功能2&#xff1a;&#xff08;1&#…...

JavaScript中的对象-栈内存和堆内存以及this指向的两种情况(后续会出进阶)

1.1 栈内存和堆内存 我们知道程序是需要加载到内存中来执行的&#xff0c;我们可以将内存划分为两个区域:栈内存和堆内存 原始类型占据的空间是在栈内存中分配的对象类型占据的空间是在堆内存中分配的 1.1.1 值类型和引用类型 原始类型的保存方式&#xff1a;在变量中保存的是…...

shell脚本使用curl上传FTP

背景&#xff1a;要求使用curl通过shell脚本实现上传文件到FTP的功能&#xff0c;同时对远程目录不存在的时候&#xff0c;主动创建目录并上传文件&#xff0c;shell脚本如下&#xff1a; #!/bin/bash# FTP服务器的地址 FTP_SERVER"ftp://1.1.1.1:2121" # FTP用户名…...

【漏洞分析】Fastjson最新版本RCE漏洞

01漏洞编号 CVE-2022-25845CNVD-2022-40233CNNVD-202206-1037二、Fastjson知多少 万恶之源AutoType Fastjson的主要功能是将Java Bean序列化为JSON字符串&#xff0c;这样得到的字符串就可以通过数据库等方式进行持久化了。 但是&#xff0c;Fastjson在序列化及反序列化的过…...

【项目开发 | 跨域认证】JSON Web Token(JWT)

未经许可,不得转载。 文章目录 JWT设计背景:跨域认证JWT 原理JWT 结构JWT 使用方式注意JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理、结构及用法。 JWT设计背景:跨域认证 互联网服务的用户认证流程是现代应用中的核心组成部分,通常的流程…...

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…...

微信版产品目录如何制作?

微信作为我国最流行的社交媒体平台&#xff0c;拥有庞大的用户群体。许多企业都希望通过微信来推广自己的产品&#xff0c;提高品牌知名度。制作一份精美、实用的微信版产品目录&#xff0c;是企业微信营销的重要手段。微信版产品目录的制作方法&#xff0c;帮助您轻松入门。 ​…...

Graphormer企业级应用:制药公司分子筛选流水线中的轻量部署实践

Graphormer企业级应用&#xff1a;制药公司分子筛选流水线中的轻量部署实践 1. 项目背景与价值 在药物研发领域&#xff0c;分子筛选是耗时耗力的关键环节。传统实验方法需要数月时间才能完成数千种化合物的性质测试&#xff0c;而基于AI的分子属性预测技术可以将这一过程缩短…...

GLM-Image技术验证:长宽比对构图影响实测数据

GLM-Image技术验证&#xff1a;长宽比对构图影响实测数据 1. 项目背景介绍 GLM-Image是由智谱AI开发的先进文本到图像生成模型&#xff0c;提供了一个美观易用的Web交互界面。这个界面基于Gradio构建&#xff0c;让用户能够轻松使用GLM-Image模型生成高质量的AI图像。 在实际…...

在GCP上运行autoresearch

Andrej Karpathy最近开源了autoresearch&#xff0c;这是一个将真实LLM训练环境交给AI代理并让它自主实验的项目。代理修改模型代码&#xff0c;训练恰好5分钟&#xff0c;检查验证损失是否改善&#xff0c;保留或丢弃更改&#xff0c;然后重复。你去睡觉&#xff1b;醒来时会看…...

Step3-VL-10B内网穿透应用:安全远程模型调用方案

Step3-VL-10B内网穿透应用&#xff1a;安全远程模型调用方案 1. 场景需求与痛点分析 很多企业和机构在内部部署了强大的多模态AI模型&#xff0c;比如Step3-VL-10B这样的视觉语言模型&#xff0c;能够处理图像和文本的复杂任务。但这些模型通常运行在内网环境中&#xff0c;外…...

忍者像素绘卷微信小程序接入:用户提示词历史+生成图云存储方案

忍者像素绘卷微信小程序接入&#xff1a;用户提示词历史生成图云存储方案 1. 项目背景与核心价值 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;将16-Bit复古游戏美学与现代AI图像生成技术完美结合。这款工具特别适合创作具有忍者主题和复古像素…...

工业质检实战:用Real-IAD D³的‘伪3D’光度立体数据,搞定MVTec搞不定的细微划痕

工业质检实战&#xff1a;用Real-IAD D的‘伪3D’光度立体数据&#xff0c;搞定MVTec搞不定的细微划痕 在精密制造领域&#xff0c;金属表面0.1mm级的发丝划痕往往成为质检工程师的噩梦。传统2D视觉系统受限于平面成像原理&#xff0c;对这类微观三维形变束手无策&#xff1b;而…...

手把手教你部署M2FP:快速搭建人体部位识别服务

手把手教你部署M2FP&#xff1a;快速搭建人体部位识别服务 1. 引言&#xff1a;为什么选择M2FP进行人体解析&#xff1f; 在计算机视觉领域&#xff0c;人体解析&#xff08;Human Parsing&#xff09;是一项关键技术&#xff0c;它能够将图像中的人体划分为多个语义区域&…...

Ryujinx:C编写的Nintendo Switch模拟器技术解析与应用指南

Ryujinx&#xff1a;C#编写的Nintendo Switch模拟器技术解析与应用指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款用C#编写的实验性Nintendo Switch模拟器&#xff…...

打造沉浸式音乐体验:Apple Music-Like Lyrics 全栈技术指南

打造沉浸式音乐体验&#xff1a;Apple Music-Like Lyrics 全栈技术指南 【免费下载链接】applemusic-like-lyrics 一个基于 Web 技术制作的类 Apple Music 歌词显示组件库&#xff0c;同时支持 DOM 原生、React 和 Vue 绑定。 项目地址: https://gitcode.com/gh_mirrors/ap/a…...

5分钟解锁网盘直链下载:告别限速,拥抱满速自由

5分钟解锁网盘直链下载&#xff1a;告别限速&#xff0c;拥抱满速自由 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 还在为网盘下载速度而烦恼吗&#xff1f;你是否经历过下载一个几GB的文件…...