react性能提升原理:虚拟DOM

react把真是的DOM tree,转化成virtual DOM,每次数据更新后,重新计算virtual DOM并与上一次的作对比,然后对发生改变的部分进行批量更新。从此性能得到提升。

正文:通信

父——>子 使用props。

子组件中(我的示例中,父组件1个,子组件3个):

class Input extends React.Component{ //input子组件,class类型的组件
constructor(props) {
super(props);
this.onChangeFunc = this.onChangeFunc.bind(this)
this.onBlur = this.onBlur.bind(this)
}
render (){
return <input className={this.props.color}
value = {this.props.value}
onChange={this.onChangeFunc}
onBlur = {this.onBlur}
/>
}
onChangeFunc(e){
this.props.inputValueFunc(e.target.value) //这里使用了从父组件传进来的方法
}
onBlur(e){
var value = parseInt(e.target.value,10);
if (value) {
alert('你输入了数字')
} else {
alert('你输入了字符串')
}
}
} class Button extends React.Component{
render(){
return <button className={this.props.color}>{this.props.name}</button>
}
} function Hello(props){ //props是从父组件中传进来的。
return <div className={props.color}>{props.children}</div>
}

上面示例代码中,有3个子组件,其中前两个是class类组件,props是从父组件中传进来的对象。

父组件中:

class App extends Component {
constructor(props){
super(props)
this.state = {value:'please input something'}
this.inputValueFunc = this.inputValueFunc.bind(this)
}
inputValueFunc(value){
this.setState({
value: value
})
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header> <Hello color='blue'>
<h3>啦啦啦</h3>
<p>Thank you for visiting !</p>
</Hello> <Input inputValueFunc={ this.inputValueFunc } value={this.state.value} color='blue'/> //传入的props可以有方法。 <Button color='blue' name='submit' value = {this.state.value}></Button> // 在引入子组件时候,传入props,就是上面的属性。
</div>
);
}
}

子——>父

react中,子不能直接向父通信,解决办法是:

直接把要传的数据保存在父组件的state中,例如本例子中APP组件的state,然后在父组件中写方法,用来改变自己的state。把方法inputValueFunc传给子组件,子组件调用该方法,并把数据作为参数传给inputValueFunc。

子——>子

寻找最近的父组件,通过父组件通信。或者使用context,但是官方并不推荐,有可能移除(感觉不是亲生的啊,官方文档各种理由不建议使用。。。)。因此,对于大的项目,还是使用状态管理工具吧。

react学习(二)之通信篇的更多相关文章

  1. React 学习(二) ---- props验证与默认属性

    在上一节中, 我们提到了props, 组件之间数据的传递使用props. 我们调用组件时可以设置props, 组件内部通过props获取. 为了props 使用更加友好, React 提供了简单的验证 ...

  2. react学习二 生命周期

    转自:https://www.cnblogs.com/gdsblog/p/7348375.html react 中compent getDefaultProps object getDefaultPr ...

  3. React 学习二 组件

    React的一个最大的特点就是组件化的开发模式.今天就来试一下: <!DOCTYPE html> <html> <head> <meta charset=&q ...

  4. 【react学习二】create-react-app 接入antd 并按需加载组件

    1.安装 cnpm i babel-plugin-import --save-dev 2.使用 在根目录下的package.json下的bable中添加相应代码 "babel": ...

  5. 【JAVASCRIPT】React学习- 数据流(组件通信)

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...

  6. webpack学习(六)—webpack+react+es6(第3篇)

    接上篇 : webpack学习(六)—webpack+react+es6(第2篇) 上篇其实是有问题的,问题在取服务器数据这块.this.props 表示那些一旦定义,就不再改变的特性,而 this. ...

  7. webpack学习(六)—webpack+react+es6(第2篇)

    接上篇        webpack学习(五)—webpack+react+es6(第1篇) 本文做个简单的图片加文字的页面.其中,配置文件跟上篇一致.项目结构: index.html <!DO ...

  8. Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文

    前言 之前也分享了不少自己的文章,但是对于 Flink 来说,还是有不少新入门的朋友,这里给大家分享点 Flink 相关的资料(国外数据 pdf 和流处理相关的 Paper),期望可以帮你更好的理解 ...

  9. Windows phone 8 学习笔记(3) 通信

    原文:Windows phone 8 学习笔记(3) 通信 Windows phone 8 可利用的数据通信方式比较广泛,在硬件支持的前提下,我们可以利用WiFi.蓝牙.临近感应等多种方式.数据交互一 ...

随机推荐

  1. package-lock.json,我们应该了解

    原谅我占2017年12月31日一个坑,后续补上

  2. MySQL 优化实战记录

    阅读本文大概需要 2 分钟. 背景 本次SQL优化是针对javaweb中的表格查询做的. 部分网络架构图 业务简单说明 N个机台将业务数据发送至服务器,服务器程序将数据入库至MySQL数据库.服务器中 ...

  3. 如何把web.xml中的context-param、Servlet、Listener和Filter定义添加到SpringBoot中

    把传统的web项目迁移到SpringBoot中,少不了web.xml中的context-param.Servlet.Filter和Listener等定义的迁移. 对于Servlet.Filter和Li ...

  4. 第二节:Web前端-ASP.NET之C#基础

    第二节:Web前端-ASP.NET之C#基础 学习ASP.NET,要掌握学习语言,控件等技能, <div style="text-align: center; line-height: ...

  5. hover样式失效的解决方法

       提到 css 的hover 选择器,想必大家都不陌生(:hover 用于设置鼠标指向某元素上后显示的样式)  除了常用的 hover 选择器,还有3个可以和它搭配使用的选择器: :link 设置 ...

  6. Apache Lucene全局搜索引擎入门教程

    Lucene简介 Lucent:Apache软件基金会Jakarta项目组的一个子项目,Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻.在Java开发环境里Lucene是一个成熟 ...

  7. java中调用三方接口post传参时map和jsonobject的区别转换

    post方法名及参数为:(具体方法可参考https://www.cnblogs.com/mufengforward/p/10510337.html) public static String doPo ...

  8. python函数学习1

    函数1 (1)定义: def 函数名(参数列表) 函数体 (2)参数传递: 在python中,一切都是对象,类型也属于对象,变量是没有类型的. a = [1,2,3] a = "hellow ...

  9. .NetCore外国一些高质量博客分享

    前言 我之前看.netcore一些问题时候,用bing搜索工具搜到了一些外国人的博客.翻看以下,有学习的价值,就分享在这里了. 个人博客 andrewlock.net 最新几篇如下,一看标题就知道很有 ...

  10. [Jenkins]IOS构建机配置记录

    ------------------- 如需转载,请注明出处 ------------------- 随着业务量和开发人员的递增,IOS构建每天都会排队,影响研发效率.随购买了新的垃圾桶,进行配置. ...