react组件传参记录,防止以后忘记,欢迎指正讨论
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>
);
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Calculator />);
对官网的这段代码进行分析
分为3个组件以及各自的参数和方法。
- 父组件:
** Calculator
** 参数:
** 方法: - 子组件:
** TemperatureInput
** 参数:
** 方法:
** BoilingVerdict
** 参数:
** 方法:
总结:由于props父类的参数子类是不可修改,所以传入父类的方法去处理这个参数,得益于 setState() 的调用,React 能够知道 state 已经改变了,然后会重新调用 render() 方法来确定页面上该显示什么。
react组件传参记录,防止以后忘记,欢迎指正讨论的更多相关文章
- 从 Vue 的视角学 React(四)—— 组件传参
组件化开发的时候,参数传递是非常关键的环节 哪些参数放在组件内部管理,哪些参数由父组件传入,哪些状态需要反馈给父组件,都需要在设计组件的时候想清楚 但实现这些交互的基础,是明白组件之间参数传递的方式, ...
- React(7) --react父子组件传参
react父子组件传参 父级向子级传参:在父组件中,我们引入子组件,通过给子组件添加属性,来起到传参的作用,子组件可以通过props获取父组件传过来的参数. 在父组件中: import React f ...
- vue父组件传参给子组件
其实组件之间传参有很多种方法: 1.通过本地存储 2.使用vuex状态管理 今天记录一下第三种方法 1.首页我们先创建一个项目(创建项目自行百度) 2.打开项目,在components文件夹下新建一个 ...
- Vue 子组件向父组件传参
直接上代码 <body> <div id="counter-event-example"> <p>{{ total }}</p> & ...
- vue 父子组件传参
父向子组件传参 例子:App.vue为父,引入componetA组件之后,则可以在template中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,component ...
- Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)
一.前言 1.公共轮播图的实现 2.组件传参,公共组件的实现 二.主要内容 1.公共轮播图的实现 (1)分析:当渲染不同的轮 ...
- Vue-admin工作整理(四):路由组件传参
路由组件传参:如果在一个页面中,需要根据路由去获得参数,去对页面进行一些逻辑处理,首先可以通过this.$router来获取路由实例的参数,这样页面组件和路由就进行了耦合,为了进行分离,更大程度复用, ...
- VueJs(11)---vue-router(命名路由,命名视图,重定向别名,路由组件传参)
vue-router 上篇文章讲了第一篇vue-router相关文章,文章地址:VueJs(10)---vue-router(进阶1) 一.命名路由 有时候,通过一个名称来标识一个路由显得更方便一些, ...
- vue子组件传参给父组件
关于父组件传参给子组件,可以看我另一篇文章 教程开始: 我们要实现的效果是:在子组件的Input框输入,父组件中实时更新显示.(也就是把子组件中的数据传给父组件) 一.子组件代码 template部分 ...
- 【vue】父向子组件传参、子组件向父传参
1.父向子组件传参 App.vue为父,引入componetA组件之后,则可以在App.vue中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,componenta与 ...
随机推荐
- 2021昆明B
容斥 + 矩形面积并 + 状压dp B-Blocks_第46届ICPC亚洲区域赛(昆明)(正式赛) (nowcoder.com) 题意 给出一个矩形A \((0,0),(W,H)\), 给出 \(n\ ...
- .NET core api返回烦人的null
默认的时候 把这个为null的去掉 只需要加入这一行代码 即可搞定 builder.Services.AddMvc().AddJsonOptions(o => { o.JsonSeriali ...
- C++ MFC学习 (三)
视窗口覆盖在框架窗口之上 如果有了 OnDraw 不要再用OnPaint OnPaint会覆盖掉OnDraw所画内容 1 // MFC_Demo1View.cpp : CMFC_Demo1View ...
- linux安装grafana成功后,登录成功,几天后无法访问
页面提示: 解决方法: 扩展磁盘空间 检查浏览器版本:升级浏览器版本
- CSS3图片自适应各种尺寸的屏幕
img { max-width: 100%; height: auto;} 设置最大宽度,高度自适应.
- foreach的异步(async,await)的问题及其处理方式
开发中遇见个难题很苦恼,好在我解决了,只要能解决我就很开心 本篇文章从forEach方法 到promise 到async await统统理解个遍,进入正题 先看下面代码会出现什么问题: const a ...
- storcli64简述
一.查询raid卡.raid组.物理硬盘信息 Controller_id:硬盘所在的raid卡的id,可以将该参数设置为all,表示查询该工具可管理的所有控制器的id Enclosure_id:硬盘所 ...
- Java复习篇3---基础概念
关键字 关键字:被Java赋予了特定含义的英文单词 关键字的字母全是小写 常用的代码编辑器,针对关键字会有特殊的颜色标记,非常直观 例如: class: 用于(创建\定义)一个类,后面紧跟类名. 类是 ...
- textfsm
from concurrent.futures import ThreadPoolExecutor import netmiko import os from threading import Loc ...
- linux 下 配置 nginx
服务器:centOS7 安装nginx之前操作: yum install -y pcre pcre-devel // pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http ...