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

state 和 props 有什么区别?

一、state

一个组件的显示形态可以由数据状态和外部参数所决定,而数据状态就是 state,一般在 constructor 中初始化

当需要修改里面的值的状态需要通过调用 setState 来改变,从而达到更新组件内部数据的作用,并且重新调用组件 render 方法,如下面的例子:

class Button extends React.Component {
  constructor() {
    super();
    this.state = {
      count: 0,
    };
  }

  updateCount() {
    this.setState((prevState, props) => {
      return { count: prevState.count + 1 };
    });
  }

  render() {
    return (
      <button onClick={() => this.updateCount()}>
        Clicked {this.state.count} times
      </button>
    );
  }
}

setState 还可以接受第二个参数,它是一个函数,会在 setState 调用完成并且组件开始重新渲染时被调用,可以用来监听渲染是否完成

this.setState(
  {
    name: "JS每日一题",
  },
  () => console.log("setState finished")
);

二、props

React 的核心思想就是组件化思想,页面会被切分成一些独立的、可复用的组件

组件从概念上看就是一个函数,可以接受一个参数作为输入值,这个参数就是 props,所以可以把 props 理解为从外部传入组件内部的数据

react 具有单向数据流的特性,所以他的主要作用是从父组件向子组件中传递数据

props 除了可以传字符串,数字,还可以传递对象,数组甚至是回调函数,如下:

class Welcome extends React.Component {
  render() {
    return <h1>Hello {this.props.name}</h1>;
  }
}

const element = <Welcome name="Sara" onNameChanged={this.handleName} />;

上述 name 属性与 onNameChanged 方法都能在子组件的 props 变量中访问

在子组件中,props 在内部不可变的,如果想要改变它看,只能通过外部组件传入新的 props 来重新渲染子组件,否则子组件的 props 和展示形式不会改变

三、区别

相同点:

  • 两者都是 JavaScript 对象
  • 两者都是用于保存信息
  • props 和 state 都能触发渲染更新

区别:

  • props 是外部传递给组件的,而 state 是在组件内被组件自己管理的,一般在 constructor 中初始化
  • props 在组件内部是不可修改的,但 state 在组件内部可以进行修改
  • state 是多变的、可以修改

参考文献

  • Lucy | ReactJS: Props vs. State
  • react中state、props以及两者的区别 - 掘金

相关文章:

state 和 props 有什么区别?

一、state 一个组件的显示形态可以由数据状态和外部参数所决定&#xff0c;而数据状态就是 state&#xff0c;一般在 constructor 中初始化 当需要修改里面的值的状态需要通过调用 setState 来改变&#xff0c;从而达到更新组件内部数据的作用&#xff0c;并且重新调用组件 r…...

Unity 获取桌面路径的方法

在Unity中&#xff0c;当我们碰到以下一些情况时&#xff0c;可能需要桌面的路径。 1、文件操作&#xff1a;如果我们想在游戏中保存或读取文件到桌面&#xff0c;就可以使用桌面路径来指定文件的位置。 2、调试信息&#xff1a;在开发过程中&#xff0c;我们往往会将一些调试…...

基于SSM的考研图书电子商务平台的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

信息系统“好用”的标准探讨

数字化转型建设的关键不在建设信息系统。这是为了避免走信息化建设的老路——业务和信息化两张皮&#xff0c;寄希望信息系统解决业务问题。在数字化转型建设中&#xff0c;信息系统仍然是重要抓手和显性成果&#xff0c;是企业业务和数据的承载平台&#xff0c;也是IT厂商向客…...

vue elementui 实现从excel从复制多行多列后粘贴到前端界面el-table

1、效果图 可以全部复制粘贴&#xff0c;也可以单独对某行、某列进行复制粘贴 从excel复制粘贴到前端页面的table上 2、实现代码 html部分&#xff1a; <template><div><el-table:data"tableData"borderstyle"width: 100%":cell-class-…...

C++学习 --类和对象之友元

目录 1&#xff0c; 全局函数做友元 2&#xff0c; 类做友元 3&#xff0c; 成员函数做友元 友元可以让函数、成员函数、类&#xff0c; 访问另外一个类的私有变量 1&#xff0c; 全局函数做友元 在类中&#xff0c; 通过friend 数据类型 函数名()方式&#xff0c;将函数当…...

Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例

Flutter笔记 使用Flutter构建响应式PC客户端/Web页面-案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/detai…...

聊聊LogbackMDCAdapter

序 本文主要研究一下LogbackMDCAdapter MDCAdapter org/slf4j/spi/MDCAdapter.java public interface MDCAdapter {/*** Put a context value (the <code>val</code> parameter) as identified with* the <code>key</code> parameter into the cur…...

spring命名空间注入和XML自动装配、引入外部配置文件

Spring p命名空间注入util命名空间注入基于XML的自动装配根据名称自动装配 Spring引入外部属性配置文件 p命名空间注入 作用&#xff1a;简化配置。 使用p命名空间注入的前提条件包括两个&#xff1a; ● 第一&#xff1a;在XML头部信息中添加p命名空间的配置信息&#xff1a…...

【2024年11月份--2024精灵云校招C++笔试题】

​ 考试形式 笔试考了三道算法题&#xff0c;笔试形式为阅读题目&#xff0c;然后用中文给出算法思路&#xff0c;最后给出算法例程&#xff0c;分数各占一半&#xff0c;简单&#xff0c;中等&#xff0c;复杂各一道题。我看9月份有人也是考这3道题&#xff0c;一模一样。 第…...

Visual Studio 2019下编译OpenCV 4.7 与OpenCV 4.7 contrib

一、环境 使用的环境是Win10,Visual Studio 2019,Cmake3.28,cdua 11.7&#xff0c;cudnn 8.5,如果只是在CPU环境下使用&#xff0c;则不用安装CUDA。要使用GPU处理&#xff0c;安装好CUDA之后&#xff0c;要测试安装的CUDA是否能用。不能正常使用的话&#xff0c;添加一下系统…...

【Linux网络】系统调优之聚合链路bonding,可以实现高可用和负载均衡

一、什么是多网卡绑定 二、聚合链路的工作模式 三、实操创建bonding设备&#xff08;mode1&#xff09; 1、实验 2、配置文件解读 3、查看bonding状态,验证bonding的高可用效果 三、nmcli实现bonding 一、什么是多网卡绑定 将多块网卡绑定同一IP地址对外提供服务&#xf…...

k8s持久化存储PV、PVC

容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;重新启动。其次&a…...

CocosCreator3.8原生引擎源码研究

1. Cocos Creator引擎架构图 2. 原始引擎源码流程图 下图中包含Android native层引擎到js适配层的启动和主循环的启用流程和必要说明&#xff0c;本猿比较懒&#xff0c;暂时不细述了&#xff0c;各位看官直接看图吧&#xff0c;还在细化扩充&#xff0c;后续逐渐更新。。。 版…...

高二英语上

unit 1 1.yarn三种意思 1.码&#xff1b; 2.庭院&#xff0c;天井&#xff1b; 3.花园&#xff1b;down**down 在这里是介词,也可以作副词&#xff0c;与 down 相对的是 up。请比较下列两句: 1.Look! Hes driving down the street . 2.Look! Hes driving up the street .这两例…...

JavaWeb Day10 案例 准备工作

目录​​​​​​​ 一、需求说明 二、环境搭建 &#xff08;一&#xff09;数据库 &#xff08;二&#xff09;后端 ①controller层 1.DeptController.java 2.EmpController.java ②mapper层 1.DeptMapper.java 2.EmpMapper.java ③pojo层 1.Dept.java 2.Emp.jav…...

Nginx:不同域名访问同一台机器的不同项目

Nginx很简单就可以解决同一台机器同时跑两个或者多个项目&#xff0c;而且都通过域名从80端口走。 以Windows环境下nginx服务为例&#xff0c;配置文件nginx.conf中&#xff0c;http中加上 include /setup/nginx-1.20.1/conf/conf.d/*.conf;删除server部分&#xff0c;完整如…...

C++(20):new数组时元素个数自动推到

C20在new数组时可以根据初始化列表&#xff0c;自动推到元素个数&#xff1a; #include <iostream> using namespace std;int main() {int *pd new int[]{1,2,3,4};for(auto i 0; i < 4; i){cout<<pd[i]<<endl;}return 0; }运行程序输出&#xff1a; 1…...

使用visualStudio发布可执行文件

编译成功后会在程序项目的路径下创建一个debug文件夹和一个release文件夹 文件夹中的具体文件入下所示 生成32位的可执行文件 32位的可执行文件可以在64位的计算机中执行&#xff0c;而64位的操作系统程序只能在64位的计算机中执行安装运行库的安装包根据电脑的版本选择合适的…...

yolo系列报错(持续补充ing)

文章目录 export GIT_PYTHON_REFRESHquiet解决 没有pt权重文件解决 python文件路径报错解决 读取文件列名报错解决 导入不同文件夹出错解决 megengine没有安装解决然后你发现它竟然还没有用 export GIT_PYTHON_REFRESHquiet 设置环境变量 GIT_PYTHON_REFRESH &#xff0c;这个…...

百度网盘秒传脚本:3分钟掌握文件秒传的核心技术

百度网盘秒传脚本&#xff1a;3分钟掌握文件秒传的核心技术 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 还在为百度网盘大文件分享的漫长等待而烦恼吗&a…...

从零搞懂Transformer,从位置编码到自注意力,大模型的核心逻辑全拆解

平时我们用ChatGPT聊天、用翻译软件做中英互译、用AI写文案&#xff0c;甚至让AI帮忙编代码&#xff0c;背后最核心的“功臣”&#xff0c;都是2017年Google团队提出的Transformer模型。这个看起来复杂的模型&#xff0c;其实打破了传统AI的局限&#xff0c;靠着高效的计算能力…...

重新思考背景移除:BackgroundRemover如何改变游戏规则

重新思考背景移除&#xff1a;BackgroundRemover如何改变游戏规则 【免费下载链接】backgroundremover Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source. 项目地址: http…...

实时语义理解+物理世界反馈=下一代产线?SITS2026现场演示的AI原生控制环(毫秒级动态拓扑重构)

第一章&#xff1a;SITS2026分享&#xff1a;AI原生智能制造应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上&#xff0c;多家头部制造企业与AI基础设施厂商联合展示了“AI原生”范式在产线调度、质量检测、设备预测性维护等核心场景的深度落地实践。该范…...

如何为惠普暗影精灵笔记本解锁完整性能控制权:OmenSuperHub深度解析

如何为惠普暗影精灵笔记本解锁完整性能控制权&#xff1a;OmenSuperHub深度解析 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了官方控制软件…...

Fillinger:Illustrator智能填充脚本终极指南 - 22倍效率提升的完全教程

Fillinger&#xff1a;Illustrator智能填充脚本终极指南 - 22倍效率提升的完全教程 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在Adobe Illustrator设计工作中&#xff0c;你是…...

Kimi K2.5 API 完全指南:性能实测、成本测算与接入方案(2026)

上周在掘金刷到好几个帖子说 Kimi K2.5 “编码能力超越 Claude Code”&#xff0c;说实话一开始我是不信的——月之暗面之前的模型给我的印象一直是"中文理解强&#xff0c;但写代码差点意思"。结果周末花了两天把 K2.5 的 API 接进项目里跑了一圈&#xff0c;测完数…...

5分钟快速上手eRPC:从零构建你的第一个RPC服务

5分钟快速上手eRPC&#xff1a;从零构建你的第一个RPC服务 【免费下载链接】erpc An efficient, extensible and easy-to-use RPC framework. 项目地址: https://gitcode.com/gh_mirrors/er/erpc eRPC是一个高效、可扩展且易于使用的RPC框架&#xff0c;让开发者能够快速…...

终极指南:如何用GPT-Author快速生成专业EPUB电子书

终极指南&#xff1a;如何用GPT-Author快速生成专业EPUB电子书 【免费下载链接】gpt-author 项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-author GPT-Author是一款强大的电子书生成工具&#xff0c;能帮助用户快速创建专业的EPUB格式电子书。本指南将详细介…...

TP4552B低功耗 5V 常开的锂电池充放电解决方案

概述 TP4552B 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC&#xff0c;为锂电池的充放电提供完整的单芯片电源解决方案。 TP4552B 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块。TP4552B…...