通常,多个组件需要反映相同的变化数据,这时建议将共享状态提升到最近的共同父组件中去。<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>T-React</title><script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script><script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script><!-- 生产环境中不建议使用 --><script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head><body><div id="root"></div>
<script type="text/babel">function BoilingVerdict(props) {if (props.celsius >= 100) {return <p>The water would boil.</p>;}return <p>The water would not boil.</p>;
}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();
}const scaleNames = {c: 'Celsius',f: 'Fahrenheit'
};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><TemperatureInputscale="c"temperature={celsius}onTemperatureChange={this.handleCelsiusChange} /><TemperatureInputscale="f"temperature={fahrenheit}onTemperatureChange={this.handleFahrenheitChange} /><BoilingVerdictcelsius={parseFloat(celsius)} /></div>);}
}ReactDOM.render(<Calculator />, //JSX格式document.getElementById("root"));</script>
</body></html>

React-状态提升相关推荐

  1. React - 状态提升

    从入门的角度来聊一下React 的状态提升. 我们先来看一下React官网是怎么介绍这一概念的: 使用 react 经常会遇到几个组件需要共用状态数据的情况.这种情况下,我们最好将这部分共享的状态提升 ...

  2. react10_状态提升

    react 状态提升 一个父组件和多个子组件时,本来应存在于子组件的state移动到父组件,子组件使用props,父组件的state作为子组件的props传入子组件,可以使用子组件的功能,使子组件数据 ...

  3. [react] react的状态提升是什么?使用场景有哪些

    [react] react的状态提升是什么?使用场景有哪些 React的状态提升就是用户对子组件操作,子组件不改变自己的状态,通过自己的props把这个操作改变的数据传递给父组件,改变父组件的状态,从 ...

  4. React 第十章 状态提升

    1,什么是状态提升? 在很多情况下我们在React组件中 数据并不一定只是在组件内部使用,我们有可能需要将组件中的数据共享出来,在其他组件中使用.但之前我们说过React是一个单向数据流,只能将数据通 ...

  5. React学习笔记(五) 状态提升

    状态提升究竟是什么东西呢?别急,下面让我们一步一步来看看究竟要怎么使用状态提升 假设我们有这样一个需求,提供两个输入框(分别属于两个组件),保证输入框里面的内容同步 好,下面我们先来封装一个输入框组件 ...

  6. web前端高级React - React从入门到进阶之组件的状态提升

    系列文章目录 第一章:React从入门到进阶之初识React 第一章:React从入门到进阶之JSX简介 第三章:React从入门到进阶之元素渲染 第四章:React从入门到进阶之JSX虚拟DOM渲染 ...

  7. 状态提升(精读React官方文档—10)

    为什么需要状态提升? 有时候,多个组件需要共享状态,此时需要将共享状态提升到最近的共同父组件中去. 首先创建一个判断水是否沸腾的组件BoilingVerdict celsius 温度作为一个 prop ...

  8. react进入路由前获取数据_react之传递数据的几种方式props传值、路由传值、状态提升、redux、context...

    父组件: import { Route, Switch, Redirect } from 'react-router-dom' class App extends Component { render ...

  9. uiswitchbutton 点击不改变状态_Redux 包教包会(一):解救 React 状态危机

    前端应用的状态管理日益复杂.随着大前端时代的到来,前端愈来愈注重处理逻辑,而不只是专注 UI 层面的改进,而以 React 为代表的前端框架的出现,大大简化了我们编写 UI 界面的复杂度.虽然 Rea ...

  10. [译] ⚛ React 状态管理工具博物馆

    原文地址:⚛ The React State Museum: ⚡️View the hottest state management libs for React 原文作者:Gant Laborde ...

最新文章

  1. “金财工程”网络安全 五
  2. Python函数的装饰器,两层装饰器和三层装饰器
  3. linux 卸载ava,linux下配置ava环境变量.doc
  4. Java GUI界面
  5. javascript 模仿点击链接
  6. 【原创】搭建spark环境中的坑及解决办法
  7. android大屏适配_Android屏幕适配
  8. 网游服务器通信架构设计
  9. PHP里 date() 函数与 strtotime() 函数笔记
  10. NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))...
  11. mac:文件编码问题
  12. MySQL 大表优化方案(长文)
  13. 【软考】软件设计师知识点整理(待更新)
  14. 【HTTP协议】HTTP协议初体验,深入浅出网络协议
  15. 第三课:布尔逻辑与逻辑门
  16. Easypack: JEECG的容器化编译环境快速构建
  17. svn错误svn: E170000: Unrecognized URL scheme for http
  18. 增强 Jupyter Notebook 的功能,这里有四个妙招
  19. 悟空榜+直播,苏宁618开启数字化零售新玩法
  20. 利用最小二乘法算法预测考研人数

热门文章

  1. Python基础之格式化输出函数format()功能详解
  2. android tabhost --android UI 学习
  3. 上海电信计划2015年用户带宽提高12.5倍
  4. PM Basic Skill---Communicate Plan
  5. 后盾网lavarel视频项目---1、数据迁移
  6. (转)CSS样式表继承详解
  7. Android SlidingMenu以及ActionBarSherlock的基础使用教程
  8. 发光二极管原理,理解,相关计算
  9. windows server 2008 如何取消禁ping
  10. 获取其他进程中ListView的文本