//这里是父组件的代码:
export default class HeaderCom_son extends React.Component {
constructor(props) {
super(props)
this.state = {
counter: 0,
}
this.x = 0;
this.y = 0;
}
componentWillMount() {
this.timer = setInterval(function () {
this.x++;
this.setState({
counter: this.state.counter + 1
})
this.setState
}.bind(this), 1000);
this.pp = null;
this.init();
} init() {
this.pp = <HeaderCom_son_son x={this.x} y={this.y} counter={this.state.counter}/>  //这个this.pp仅运行一次,所以就是仅赋值一次
 } render() { 
  this.y++;
  return (
  <div>
    <div>这是HeaderCom_son</div>     ====================
    <h3>说明:this.x和this.state.counter都是在一个定义在componentWillMount内的计时器里实现自增</h3>
    <p>this.state.counter:{this.state.counter}</p> <p>this.x:{this.x}</p>
    ====================  
    <h3>说明:this.y是定义在render方法里实现自增</h3>
    <p>this.y:{this.y}</p>
    <h3>下面是三个:HeaderCom_son_son组件</h3>
   {this.pp}  {/* 这个结果永远是初始值0,0,0不会变 */}
   <HeaderCom_son_son x={this.x} y={this.y} counter={this.state.counter}/>  {/* 这个结果是:子组件的props属性会实时改变,所以能同步获取父组件的改变 */}
   <HeaderCom_son_son x={-1} y={-1} counter={-1}/>  {/* 这个结果是当然页不会变 */}
  </div> );
  }
}
//这里是子组件的代码
import React from 'react'; export default class HeaderCom_son_son extends React.Component { render() {
return(
<div>
我是HeaderCom_son_son<br/>
{this.props.x}<br/>
{this.props.y}<br/>
{this.props.counter}
</div>
); }
}

运行293秒后的结果如下图所示:

小总结:

  1、this.pp = <HeaderCom_son_son x={this.x} y={this.y} counter={this.state.counter}/>  

    这个this.pp仅运行一次,所以就是仅赋值一次,并且我发现,this.pp.props和子元素的this.props显示是相同的,还有,即使运行时“等号”右侧的值是对象,this.pp.props的属性值仍是简单数据类型,

    所以,如果这个this.pp仅运行一次后期,无论this.pp.props内的属性再如何改变,都不会再传递到子组件上!

  2、<HeaderCom_son_son x={this.x} y={this.y} counter={this.state.counter}/>  {/* 这个结果是:子组件的props属性会实时改变,所以能同步获取父组件的改变 */}

    这个组件的属性都所以能够实时更新,是因为:它在render()方法里,而我们每次只要运行了setState更改都会重新运行render()方法,所以会重新运行:

    <HeaderCom_son_son x={this.x} y={this.y} counter={this.state.counter}/>,

    也就会重新赋值,所以能实现实时传递给子组件;

    但是,如果我们每次更新的并不是state,而仅仅更新其他值,如仅更新this.x,那么这个更新也不能同步传递给子组件,因为不会重新运行render(),也就不会重新赋值;

  最后的总结:

  归根结底,要判断子组件能否同步获得父组件传递过来的值,就是看父组件更新时,是否会重新运行传递给子组件属性的那句代码;

  

reac——父组件向子组件传递值,子组件何时能同步获得父组件改变后的值的更多相关文章

  1. Angular06 组件、模块、父子组件之间的数据传递

    1 创建组件 进入到angular项目的根目录,执行如下命令 ng g component test-component 注意:执行完上述命令后在angular项目的src/app文件夹下就会多出一个 ...

  2. Vue组件注册与数据传递

    父子组件创建流程 1.构建父子组件 1.1 全局注册 (1)构建注册子组件 //构建子组件child var child = Vue.extend({ template: '<div>这是 ...

  3. React中父组件与子组件之间的数据传递和标准化的思考

    React中父组件与子组件之间的数据传递的的实现大家都可以轻易做到,但对比很多人的实现方法,总是会有或多或少的差异.在一个团队中,这种实现的差异体现了每个人各自的理解的不同,但是反过来思考,一个团队用 ...

  4. Vue2.x中的父组件数据传递至子组件

    父组件结构 template <template> <div> <v-girl-group :girls="aGirls"></v-gir ...

  5. vue 父组件中的数据如何传递给子组件

    父组件:<template> <div id="app"> <img src="./assets/logo.png"> &l ...

  6. Vue把父组件的方法传递给子组件调用(评论列表例子)

    Vue把父组件的方法传递给子组件调用(评论列表例子) 效果展示: 相关Html: <!DOCTYPE html> <html lang="en"> < ...

  7. vue父组件与子组件之间的数据传递

    父组件向子组件传递数据 父组件用数据绑定:子组件用props接收 <!-- test-vue-model父组件 --> <template> <div> <m ...

  8. Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

    Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...

  9. 如果把父组件的数据实时的传递到子组件:用watch

    1.在子组件使用watch来监听传递给子组件的数据,然后更新子组件的数据. 2.watch和computed结合使用效果非常好. 参考链接:https://blog.csdn.net/zhouweix ...

随机推荐

  1. 使用HBuilderX实现打包vue项目成app

    一.准备开发工具 开发工具:HBuilderX 官网地址:http://www.dcloud.io (标准版需要自己安装插件,app开发版已经把app开发常用的插件安装好了,开箱即用,建议使用开发版) ...

  2. 浅谈javascript和python语言的深拷贝

    深拷贝: 之前在开发中我遇到一个很大的bug,经过我多次调试之后我发现原本应该有保存数据的地方数据全部被清空,仔细一看发现原来是被人为删除,明明操作的是一个副本,为什么原本也会跟着一起被删除呢?经过了 ...

  3. NPOI设置水平、垂直居中

    C#语法: string fs = "@report.xls";//文件路径 FileStream excelPath = File.Open(@fs, FileMode.Open ...

  4. ui4-5

    2016PS第4-5周 图像的高级编辑方法: 4-1.用变换将照片放入相框 1.打开素材文件01-1.jpg 2.执行:文件/置入,选素材01-2.jpg 3.执行:编辑/变换/缩放,缩小照片,暂不退 ...

  5. windows 虚拟机VMware 安装linux系统注意事项!!!

    1.主机CPU是否支持虚拟化技术?      启动 CPUZ 软件(如下图) 注: 32位系统查看使用CPUZ_x86软件             64位系统查看使用CPUZ_x64软件    启动后 ...

  6. springcloud eureka注册中心 高可复用。

    1:新建两个注册中心项目(名称都为:spring-cloud-eureka,只是端口分别为8000.8001 ).两个注册中心相互注册对方. 2:两个注册中心都启动后,则对方服务列表都有对方的服务. ...

  7. Java 语言结构【转】

    Java 语言结构 基础:包(Package).类(Class)和对象(Object) 了解 Java 的包(Package).类(Class)和对象(Object)这些基础术语是非常重要的,这部分内 ...

  8. Javascript之in操作符的用法

    in操作符是js里面常用的一个操作符,下面是其几个常用的功能: 1.配合for语句循环遍历/迭代数组中的元素 2.配合for语句循环遍历/迭代集合中的属性 3.判断对象是否是数组的元素 4.判断对象是 ...

  9. [问题解决]Fresco设置圆角效果不生效问题探究

    [问题解决]Fresco设置圆角效果不生效问题探究 /** * Created by diql on 2017/2/21 11:07:04. */ 问题 在View中设置: fresco:rounde ...

  10. web端网页适配移动端注意事项,以及遇到的问题

    1.一定要加上 <!-- name=“viewport” 指视口 width=device-width 宽度等于视口宽 initial-scale=1.0 像素比例 maximum-scale= ...