react学习记录-状态提升

2023-11-12

前端应用状态管理 —— 状态提升

我们在使用state存放数据的时候,应当倾向于把数据放在父组件上,这是为了在父组件下的兄弟组件都在依赖或者影响这个数据的时候,能够进行共享。避免让两个子孙组件分别取得两个数据的备份,造成通信的障碍或者说不同步。

我们把数据交给父组件,使得它的子孙组件都能通过props获取到数据的这种方式,叫做“状态提升”。

总结一下:当某个状态被多个组件依赖或者影响的时候,就把该状态提升到这些组件的最近公共父组件中去管理,用 props 传递数据或者函数来管理这种依赖或着影响的行为。

下面是胡子大哈老师给出的一个组件树示意图。

在这里插入图片描述

可以看到,尽管状态提升带来了一个数据管理上的便利,但我们同时也要考虑数据传递的路径,不可避免地去修改每个数据传递经过的组件,这对代码的组织管理维护也带来了不便,如何更好地管理这种被多个组件依赖的状态呢?

React.js 并没有提供好的解决方案来管理这种组件之间的共享状态,在实际项目当中状态提升也不是一个好的解决方案,所以我们需要Redux这样的辅助工具(这和vuex是类似的道理)。

一般来说,对于不会被多个组件依赖和影响的状态(例如某种下拉菜单的展开和收起状态),只需要保存在组件内部即可,不需要做提升或者特殊的管理。

课后习题

百分比换算器

class Input extends Component {
   
  constructor(){
   
    super(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react学习记录-状态提升 的相关文章

  • fabric,peer channel create报错:Error: got unexpected status: BAD_REQUEST -- error authorizing update:

    hyperledger fabric的cli在peer channel create 时报错 Error got unexpected status BAD REQUEST error authorizing update error va
  • sudo: vim: command not found

    sudo rm var lib dpkg lock sudo apt get update sudo apt get install vim
  • Maven将依赖包、jar/war包及配置文件输出到指定目录

    写在前面 1 使用 maven dependency plugin 插件将依赖包导出到指定文件夹 2 使用 maven war plugin 插件将war打包到指定路径 3 使用 maven jar plugin 插件移除配置文件将其不打包
  • cmd命令和dos命令_在Windows MS-DOS命令行教程中,带有示例的CMD / C是什么意思?

    cmd命令和dos命令 MS DOS is an operating system and shell used to run commands and provide a command line interface in Windows
  • linux内核中用到的设计模式,Linux内核设计模式–Reference Counts

    这是翻译版 英文原址 设计模式最早来源于建筑学 后被计算机科学引用 简单来说 一个设计模式描述了某类设计问题 并且针对此类问题给出了一个被实践证明有效的解决方案 Linux内核的开发中也遇到过很多设计问题 并且针对这些问题 内核开发者给出了
  • 类型保护

    1 自定义类型保护 function isString value number string value is string const number Math random 10 return number lt 5 首先定义一个函数
  • java.util.zip.ZipException: invalid LOC header (bad signature)

    java util zip ZipException invalid LOC header bad signature maven项目打包时 jar包本身损坏 需要将本地repository中的jar相关文件清除 重新从remote rep
  • 依赖

    添加构建依赖项 概览 implementation与api AndroidStudio升级3 0 gradle随之升级3 0 0 build gradle默implementation而非之前compile gradle 3 0 0 有依赖
  • anaconda 2023.7 安装、配置、开机启动和基本操作 (windows+linux 详细)

    包括notebook的开机启动 启动脚本 配置等 2023年8月13日更新教程 anaconda是conda中的一种 也可以选用其它的conda anaconda会把python pip等直接安装上 不用额外装配了 省心 conda对于需要
  • 文件外发控制如何实现?这个秘密武器请拿走

    你担心敏感文件没有经过授权就外流了吗 你担心文件发给他人后就完全失去控制了吗 你担心图纸外发泄密后 没有任何手段进行追溯吗 你担心重要文档发给别人参考后 被对方肆意转载或复制使用吗 你担心文件过大 其实对方根本就没有收到吗 以上这些问题 都
  • 权限系统与RBAC模型概述[绝对经典]

    0 前言 一年前 我负责的一个项目中需要权限管理 当时凭着自己的逻辑设计出了一套权限管理模型 基本原理与RBAC非常相似 只是过于简陋 当时google了一些权限管理的资料 从中了解到早就有了RBAC这个东西 可惜一直没狠下心来学习 更详细
  • 编程猫创作工具:新版Kitten新体验

    在少儿编程图形化工具方面 Scratch是老牌的创作工具 最为流行 用的人也最多 但是Scratch界面不友好 本地化功能欠缺 网络访问慢等问题也日渐显著 编程猫自主研发的图形化编程创作工具 源码编辑器应运而生 Kitten以更丰富的素材
  • js 判断是不是浮点

    true 非浮点 false 浮点 isNotFloat theFloat gt if theFloat theFloat theFloat trim else return true 判断是否为浮点数 let len theFloat l
  • 测试数据设计方案

    一 测试覆盖率 测试方法及技巧的应用 真正业务场景的满足 测试数据的设计覆盖 1 测试数据设计方法一 构造测试数据时 需要看数据的开源 数据的来源一般来讲有3个 一个是根据被测系统需求的分析 针对正常业务 异常情况 边界情况等来构建完整的数
  • 思科交换机65系列配置

    65系列 enable 进入配置模式 enable set ip http server enable 开启http服务 enable enable enable set system name sike swtest 配置交换机名称 en
  • Mac 上安装并启动 MySQL 服务

    目录 背景 步骤 步骤 1 官网下载 dmg 文件并安装 步骤 2 在系统设置里启动 MySQL 服务 步骤 3 更改 root 密码 步骤 3 1 停止 MySQL 服务 步骤 3 2 在安全模式下启动 MySQL 服务 步骤 3 3 更
  • 三款免费杀毒软件+clamAV

    第一款 antivir PE 完全免费 http www free av com 软件厂商 H BEDV Datentechnik GmbH 软件主页 http www free av com 厂商邮件 virus free av com
  • 【java养成】:案例:学生管理系统、斗地主洗牌

    案例学习 学生管理系统 学生管理系统 参考书籍 系统首页 用于显示系统的所有操作 并根据用户在控制台的输入选择需要使用的功能 查询功能 用户选择该功能后 在控制台打印所有学生的信息 添加功能 用户选择该功能后 要求用户在控制台输入学生学号
  • Python打印九九乘法表(Python)

    算法 打印九九乘法表 方法一 1 运用range 函数 参数值含左不含右 2 Python的print函数默认换行 这里通过把九九乘法表中在一行的转化成字符串类型再打印的方法解决 3 在每个乘式的后面加一个空格来分隔乘式 for i in

随机推荐

  • NYOJ278 排队 (约瑟夫问题)

    原题链接 参考 百科 约瑟夫问题 经典题 附ac代码 include
  • Pytorch 的损失函数Loss function使用详解

    参考 Pytorch 的损失函数Loss function使用详解 云 社区 腾讯云 目录 1 损失函数 1 nn L1Loss 2 nn SmoothL1Loss 3 nn MSELoss 4 nn CrossEntropyLoss 5
  • 虚拟文件系统VFS框架

    复杂度3 5 机密度3 5 最后更新2021 05 01 AIX虽然仅内置支持五种类型的文件系统 jfs jfs2 nfs CDROM ramfs 远少于Linux 但其设计并不局限于某一种特定的文件系统 而是采用虚拟文件系统的概念 以一种
  • 蓝桥杯C/C++省赛:高斯日记

    目录 题目描述 思路分析 AC代码 题目描述 大数学家高斯有个好习惯 无论如何都要记日记 他的日记有个与众不同的地方 他从不注明年月日 而是用一个整数代替 比如 4210 后来人们知道 那个整数就是日期 它表示那一天是高斯出生后的第几天 这
  • 数据库、表数据的三种删除方式

    第一种 drop table 第二种 delete table t第三种 runcate table 三种方式的区别 Drop table删表 常用于正对表 表结构都会被删除 而delete table和truncate table 只删除
  • 进 4 球得 1 分,阿根廷败北背后的科技与狠活

    内容一览 11 月 22 日 世界杯 C 组首场比赛 沙特阿拉伯 2 1 反超阿根廷 今天我们将逐一盘点阿根廷进 4 球得 1 分背后的科技与狠活 关键词 世界杯 VAR 半自动越位技术 沙特爆冷逆袭 2 1 反超阿根廷 2022 年世界杯
  • 图像增强的两个评价指标:峰值信噪比PSNR和结构相似度SSIM

    两种图像增强评价指标 PSNR和SSIM 峰值信噪比PSNR 结构相似度SSIM python实现 SSIM的代码 PSNR的代码 图像增强的评价指标在像素层面上通常包含平均绝对误差 MAE 均方误差法 MSE 峰值信噪比 PSNR 以及结
  • 第6天:分割处理与中断处理

    6 1 分割处理 6 1 1 bootpack c拆分 6 1 2 MakeFile整理 使用了一般规则 gas c Makefile CC1 o gas c nas gas Makefile GAS2NASK gas nas obj na
  • NumPy使用

    NumPy数组的创建 1 创建数组 array 2 制定数组类型 dtype 3 创建特殊数组 1 元素全为0 zeros 2 元素全为1 ones 3 指定元素范围 arange 4 线段性元素 linspace NumPy数组属性 1
  • 分词工具使用系列——sentencepiece使用

    分词工具使用系列 第一章 sentencepiece使用 第二章 jieba工具使用 文章目录 分词工具使用系列 前言 细说分词 一 sentencepiece是什么 二 sentencepiece使用步骤 准备文本 训练模型 使用模型 前
  • JavaScript简单实现拼图小游戏(附源码和资源)

    JavaScript简单实现拼图小游戏 附源码及资源 JavaScript代码68行 是3年前刚学JavaScript的时候写的 思想很简单 分享一下 拼图是4 4的 共三张图 按照命名规则添加其他图片也可以 资源已上传 下载地址 http
  • Hystrix实现断路器、服务降级、线程隔离

    了解Hystrix之前首先需要明白几个概念 雪崩效应 断路器 熔断机制 服务降级 线程隔离 雪崩效应 默认情况下 tomacat只有一个线程池去处理请求 这样在高并发的情况下大量的请求访问同一个服务器接口 线程池中所有的线程都用来处理访问这
  • Linux下某内网主机无法连接,通过添加路由表解决;路由表等网络知识学习

    1 问题描述与解决 这里要记录一个很奇怪的问题 当然是对我这种新手来说的 问题描述如下 当前一台Ubuntu 18 04主机在校园网环境中 同济大学 上海嘉定 上海电信 在apt安装软件的时候经常出现无法连接或者哈希值不匹配的问题 如图 这
  • 又一版A+B问题(注意细节)

    题目描述 输入两个不超过整型定义的非负10进制整数A和B lt 231 1 输出A B的m 1 lt m lt 10 进制数 输入 输入格式 测试输入包含若干测试用例 每个测试用例占一行 给出m和A B的值 当m为0时输入结束 输出 输出格
  • HCIE-Cloud Computing v2.0 lab机考全讲解

    阅读说明 中的内容是 考生的经验 建议 理解 五星表示为 必须背下来 文章目录 一 准备 题型介绍 考试环境 考试地址和密码 必知流程 二 实战 2 1 宏观方面 整体讲解 2 1 1 拓扑 类型接口 2 1 2 简述 2 2 微操 分题型
  • python画正方形的代码_python绘制正方形螺旋线的代码分享

    python绘制正方形螺旋线的代码分享 发布时间 2020 04 28 09 56 56 来源 亿速云 阅读 219 作者 小新 这篇文章主要为大家详细介绍了python绘制正方形螺旋线的代码分享 文中示例代码介绍的非常详细 具有一定的参考
  • Vite和Webpack如何使用CDN包

    为了精简打包输出的dist目录大小 我们可以引入CDN外部包的方式 来缩小打包的体积 加快打包速度 这里介绍Vite和Webpack中如何引入React CDN外部包 一 Vite引入CDN包 1 安装插件 npm i vitejs plu
  • Go实现两个Goroutine通信

    实现两个goroutine通信 要求如下 实现pingpong效果 保证程序能任意时长执行 且收到ctrl c信号之后 全身而退 即保证各个goroutine完整退出 在第三个goroutine中 可随时查找前两个goroutine各自发送
  • ASN.1编码方式详解

    ASN ASN 1 Abstract Syntax Notation dot one 抽象记法1 数字1被ISO加在ASN的后边 是为了保持ASN的开放性 可以让以后功能更加强大的ASN被命名为ASN 2等 但至今也没有出现 描述了一种对数
  • react学习记录-状态提升

    文章目录 前端应用状态管理 状态提升 课后习题 前端应用状态管理 状态提升 我们在使用state存放数据的时候 应当倾向于把数据放在父组件上 这是为了在父组件下的兄弟组件都在依赖或者影响这个数据的时候 能够进行共享 避免让两个子孙组件分别取