前端:react(柒):react 多个组件共享state

2023-10-27

//柒 react 多个组件共享state 经常会遇到几个组件需要共用状态数据的情况。这种情况下,我们最好将这部分共享的状态提升至他们最近的父组件当中进行管理。

 

const scaleNames = {

c: 'Celsius',

f: 'Fahrenheit'

};

function toCelsius(fahrenheit) {

return (fahrenheit - 32) * 5 / 9;

}

function toFahrenheit(celsius) {

return (celsius * 9 / 5) + 32;

}

function tryConvert(temperature, convert) {

const input = parseFloat(temperature);

if (Number.isNaN(input)) {

return '';

}

const output = convert(input);

const rounded = Math.round(output * 1000) / 1000;

return rounded.toString();

}

function BoilingVerdict(props) {

if (props.celsius >= 100) {

return <p>The water would boil.</p>;

}

return <p>The water would not boil.</p>;

}

class TemperatureInput extends React.Component {

constructor(props) {

super(props);

this.handleChange = this.handleChange.bind(this);

}

handleChange(e) {

this.props.onTemperatureChange(e.target.value);

}

render() {

const temperature = this.props.temperature;

const scale = this.props.scale;

return (

<fieldset>

<legend>Enter temperature in {scaleNames[scale]}:</legend>

<input value={temperature}

onChange={this.handleChange} />

</fieldset>

);

}

}

//第二个组件

class Calculator extends React.Component {

constructor(props) {

super(props);

this.handleCelsiusChange = this.handleCelsiusChange.bind(this);

this.handleFahrenheitChange = this.handleFahrenheitChange.bind(this);

this.state = {temperature: '', scale: 'c'};

}

handleCelsiusChange(temperature) {

this.setState({scale: 'c', temperature});

}

handleFahrenheitChange(temperature) {

this.setState({scale: 'f', temperature});

}

render() {

const scale = this.state.scale;

const temperature = this.state.temperature;

const celsius = scale === 'f' ? tryConvert(temperature, toCelsius) : temperature;

const fahrenheit = scale === 'c' ? tryConvert(temperature, toFahrenheit) : temperature;

return (

<div>

<TemperatureInput

scale="c"

temperature={celsius}

onTemperatureChange={this.handleCelsiusChange} />

<TemperatureInput

scale="f"

temperature={fahrenheit}

onTemperatureChange={this.handleFahrenheitChange} />

<BoilingVerdict

celsius={parseFloat(celsius)} />

</div>

);

}

}

ReactDOM.render(

<Calculator/>,

document.getElementById("note7")

)

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

前端:react(柒):react 多个组件共享state 的相关文章

  • make编译kaldi时候遇到的各种错误

    文章目录 第一个问题 aclocal 1 14 command not found 第一个问题 aclocal 1 14 command not found tools openfst 1 6 7 missing line 81 acloc
  • line-height: 1; line-height: 100%;是什么意思

    先简单看个例子 css 页面 应该猜测出来了 line height 1 line height 100 font size 50px 把哪一个放到最后都是一样的 我理解的就是 等于字体高度的 1 整 份 或者 等于 字体高度的 100 高
  • 《这就是区块链》之区块链基础(5)--去中心化的意义

    在上一篇中 花了比较大的篇幅来阐述去中心化的概念 其实对于有计算机基础的朋友来讲 去中心化或者P2P网络并不是新颖的观点 但是 我还是希望本系列文章可以从基础展开 让所有的朋友都可以理解区块链的意义所在 今天我们来谈谈去中心化到底在区块链中

随机推荐

  • matlab的cylinder函数,Matlab基本函数-cylinder函数

    1 cylinder函数 绘制三维圆柱图 2 用法说明 1 x y z cylinder 函数返回一半径和高度都为1的圆柱体x y z轴的坐标值 圆柱体沿其周长有20个等距分布的点 2 x y z cylinder r 函数一个半径为r 高
  • 第十三章:软件项目管理

    第十三章 软件项目管理 一 软件项目管理总述 1 管理 管理是通过计划 组织和控制等一系列活动 合理地配置和使用各种资源 以达到既定目标的过程 2 软件项目管理 软件项目管理先于任何技术活动之前开始 并且贯穿于软件的整个生命周期之中 软件项
  • 关于新版Win10下安装虚拟机提示“Intel VT-x处于禁用状态”如何解决

    给电脑上安装虚拟机 安装的时候可能会遇到问题 提示 Intel VT x处于禁用状态 问题原因 出现这样的原因一般都是由于系统Virtualization Technology虚拟化技术功能 关闭导致的 解决方法 进入新版Win10的BIO
  • QT代码,重载函数d_func()声明形式分析和调用关系分析

    QT代码 重载函数d func 声明形式分析和调用关系分析 define X DECLARE PRIVATE Class inline Class Private d func return reinterpret cast
  • Linux uboot顶层makefile详解 一

    VERSION 2016 主版本号 PATCHLEVEL 03 补丁版本号 SUBLEVEL 次版本号 EXTRAVERSION 附加版本信息 NAME MAKEFLAGS rR include dir CURDIR rR 表示禁止使用内置
  • 快速复习一遍C++基础知识点

    暂定月计划 1实现DSA基础算法 2完成一个STL库 3在Linux上加强相关知识 4git巩固 5OJ增强代码实现能力 今天先快读复习一遍C 知识点 想把peral读完 1 引用 交换两个数示例 C语言中 void swap int a
  • Redis 学习笔记4: Redis 3.2.1 集群搭建

    在CenOS 6 7 linux环境下搭建Redis 集群环境 1 下载最新的Redis版本 本人下载的Redis版本是3 2 1版本 下载之后 解压 编译 make 具体操作可以参考我的博文 Redis 学习笔记1 CentOS 6 7下
  • 使用navicat需要安装mysql吗_[转载] windows安装mysql及使用navicat连接

    参考资料 1 https blog csdn net u013235478 article details 50623693 2 https blog csdn net qq 35436635 article details 8012602
  • 广告公司到底干什么的?欣奥诚分享

    广告公司到底干什么的 这篇文章从产业的角度拆分广告业 还原一个真实的广告业出来 01 它们是谁 早年广告业有4类公司 品牌咨询类公司 设计创意类公司 媒介投放类公司 活动执行类公司 品牌咨询类公司 靠咨询服务为主营业务 为广告主提供品牌战略
  • 七、dokcer-compose部署springboot的jar

    1 准备 打包后包名为 ruoyi admin jar 增加接口 httpL ip port common test han 环境变量预application yml 中REDIS HOSTt的值 去环境变量去找 如果找不到REDIS HO
  • 点云基本概念

    文章目录 一 三维数据的表现形式 二 点云的概念 三 点云的特点 四 点云的获取方式 激光雷达 结构光 立体视觉 TOF相机 一 三维数据的表现形式 三维数据的表现形式一般分为四种 分别是点云 网格 体素与多视图 点云是三维空间中点的集合
  • 【新书推荐】【2020】MATLAB深度学习工具箱用户指南

    Table of contents Deep Networks Deep Learning in MATLAB What Is Deep Learning Try Deep Learning in 10 Lines of MATLAB Co
  • 监控实践: 基于K8S部署Prometheus+Grafana

    使用Prometheus对系统进行监控 使用Grafana进行数据展示 我的环境是K8S 我的部署方式是通过 yaml文件进行部署 已经部署文件上传到了Github 地址 https github com zeyangli devops o
  • SpringMVC系列(三)之CRUD增删改查

    目录 SpringMVC实现增删改查 1 导入相关依赖 2 添加配置文件 3 逆向生成对应的类 4 后台代码编写 5 前台代码编写 SpringMVC实现增删改查 1 导入相关依赖 pom xml
  • WeakMap弱引用

    let obj name 张三 name 张三 这个对象能够被读取到 因为obj这个变量名对它的引用 将引用覆盖掉 obj null 这个对象将会被从内存中移除 因为我们已经失去了对他的所有引用 let obj name 张三 let ar
  • 打开计算机窗口的快捷键是什么,打开多个窗口,用哪个快捷键可以将窗口切换?...

    2006 02 23 上网的时候 一打开窗口就是最小化 怎样可以一打开就是最大化呢 谢谢 IE具有 自动记忆功能 它能保存上一次关闭窗口后的状态参数 IE本身没有提供相关设置选项 不过可以借助修改注册表来实现 打开 注册表编辑器 找到 HK
  • MRTK-Unity简单入门

    前期工作 1 切换生成平台 UWP 2 Microsoft Mixed Reality Feature Tool导入和配置资源 Mixed Reality Toolkit Foundation 混合现实工具包基础 包是唯一的包 必须将它导入
  • 【Android】详解7.0带来的新工具类:DiffUtil

    http blog csdn net zxt0601 article details 52562770 一 概述 DiffUtil是support v7 24 2 0中的新工具类 它用来比较两个数据集 寻找出旧数据集 新数据集的最小变化量
  • 快速排序Java实现

    public class ksSort 快排 param args public static void main String args int test 1 9 5 7 8 2 4 quickSort quick Sort test f
  • 前端:react(柒):react 多个组件共享state

    柒 react 多个组件共享state 经常会遇到几个组件需要共用状态数据的情况 这种情况下 我们最好将这部分共享的状态提升至他们最近的父组件当中进行管理 const scaleNames c Celsius f Fahrenheit fu