在写React代码时,避免不了提前想想页面的结构,当然这也属于HTML布局了,比如哪些组件里需要包含哪些组件。遂突发奇想,如果试着把子组件的render内容替换原组件,会是个啥?

比如拿 https://reactjs.org/tutorial/tutorial.html 的例子来试下~

1. Game组件

属性+方法:

this.state.squares;
this.handleClick(i);

render():

<div className="game">
<div className="game-board">
<Board
squares={current.squares}
onClick={(i) => this.handleClick(i)}
/>
</div>
<div className="game-info">
<div>{status}</div>
<ol>{}</ol>
</div>
</div>

包含了一个Board组件,属性有 squares + onClick(i)。我们把Board组件用它的render()替换

2. 用render()替换Board组件

<div className="game">
<div className="game-board">
<div>
<div className="board-row">
{this.renderSquare(0)}
{this.renderSquare(1)}
{this.renderSquare(2)}
</div>
<div className="board-row">
{this.renderSquare(3)}
{this.renderSquare(4)}
{this.renderSquare(5)}
</div>
<div className="board-row">
{this.renderSquare(6)}
{this.renderSquare(7)}
{this.renderSquare(8)}
</div>
</div>
</div>
<div className="game-info">
<div>{status}</div>
<ol>{}</ol>
</div>
</div>

因为this.renderSquare()方法实际上是实例化了Square组件,所以再用Square组件替换this.renderSquare()

3. Square组件替换 this.renderSquare()

<div className="game">
<div className="game-board">
<div>
<div className="board-row">
<button className="square" onClick={() => onClick(0)}>
{squares[0]}
</button>
<button className="square" onClick={() => onClick(1)}>
{squares[1]}
</button>
<button className="square" onClick={() => onClick(2)}>
{squares[2]}
</button>
</div>
<div className="board-row">
<button className="square" onClick={() => onClick(3)}>
{squares[3]}
</button>
<button className="square" onClick={() => onClick(4)}>
{squares[4]}
</button>
<button className="square" onClick={() => onClick(5)}>
{squares[5]}
</button>
</div>
<div className="board-row">
<button className="square" onClick={() => onClick(6)}>
{squares[6]}
</button>
<button className="square" onClick={() => onClick(7)}>
{squares[7]}
</button>
<button className="square" onClick={() => onClick(8)}>
{squares[8]}
</button>
</div>
</div>
</div>
<div className="game-info">
<div>{status}</div>
<ol>{}</ol>
</div>
</div>

是不是已经很熟悉了? ^_^

因为这里的 onClick(i) 是组件Board的属性,再将其替换成Game组件里的 this.handleClick(i)方法,结果如下:

<div className="game">
<div className="game-board">
<div>
<div className="board-row">
<button className="square" onClick=this.handleClick(0)>
{squares[0]}
</button>
<button className="square" onClick=this.handleClick(1)>
{squares[1]}
</button>
<button className="square" onClick=this.handleClick(2)>
{squares[2]}
</button>
</div>
<div className="board-row">
<button className="square" onClick=this.handleClick(3)>
{squares[3]}
</button>
<button className="square" onClick=this.handleClick(4)>
{squares[4]}
</button>
<button className="square" onClick=this.handleClick(5)>
{squares[5]}
</button>
</div>
<div className="board-row">
<button className="square" onClick=this.handleClick(6)>
{squares[6]}
</button>
<button className="square" onClick=this.handleClick(7)>
{squares[7]}
</button>
<button className="square" onClick=this.handleClick(8)>
{squares[8]}
</button>
</div>
</div>
</div>
<div className="game-info">
<div>{status}</div>
<ol>{}</ol>
</div>
</div>

Soga~,原形毕露了!

这样走下来一遍,对React的render()机制大概有个谱,更重要的是理解组件属性的传递过程。

Done!

React机制浅析的更多相关文章

  1. Linux模块机制浅析

    Linux模块机制浅析   Linux允许用户通过插入模块,实现干预内核的目的.一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析. 模块的Hello World! ...

  2. typecho流程原理和插件机制浅析(第二弹)

    typecho流程原理和插件机制浅析(第二弹) 兜兜 393 2014年04月02日 发布 推荐 1 推荐 收藏 14 收藏,3.7k 浏览 上一次说了 Typecho 大致的流程,今天简单说一下插件 ...

  3. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

  4. oracle的resetlogs机制浅析

    oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?它的原理 ...

  5. webpack模块机制浅析【一】

    webpack模块机制浅析[一] 今天看了看webpack打包后的代码,所以就去分析了下代码的运行机制. 下面这段代码是webpack打包后的最基本的形式,可以说是[骨架] (function(roo ...

  6. InnoDB的锁机制浅析(五)—死锁场景(Insert死锁)

    可能的死锁场景 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意 ...

  7. InnoDB的锁机制浅析(四)—不同SQL的加锁状况

    不同SQL的加锁状况 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/ ...

  8. InnoDB的锁机制浅析(三)—幻读

    文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁) Inno ...

  9. InnoDB的锁机制浅析(二)—探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁)

    Record锁/Gap锁/Next-key锁/插入意向锁 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Recor ...

随机推荐

  1. 最里层的是child元素

    1. 简介A convenience widget that combines common painting, positioning, and sizing widgets. Container在 ...

  2. [转] Makefile 基础 (8) —— Makefile 隐含规则

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  3. python中的 __xxx__ 方法

    1 __class__ instance.__class__ The class to which a class instance belongs def foo(): pass class A(o ...

  4. 关于后台返回excel文件的问题

    一般情况ajax请求只能获取解析非流文件类型,而excel是流文件类型,这个时候获取到的数据会是一串乱码的字符串 想要下载这个excel文件,通过form表单模拟的方式可以解决 var form = ...

  5. UVa1073 Glenbow Museum

    可以把R看成顺时针转90°,O看成逆时针转270° 设R有x个,则180*(n-2)=90*x+270*(n-x) 解得R有(n+4)/2个 O有(n-4)/2个 所以n<4或者n是奇数时无解. ...

  6. UVa11424 GCD - Extreme (I)

    直接两重循环O(n^2)算gcd……未免太耗时 枚举因数a和a的倍数n,考虑gcd(i,n)==a的i数量(i<=n) 由于gcd(i,n)==a等价于gcd(i/a,n/a)==1,所以满足g ...

  7. pstack

    pstree  linux 查看进程树 和 包含的线程 pstack 显示每个进程的栈跟踪

  8. (入门SpringBoot)SpringBoot结合redis(四)

    SpringBoot整合redis: 1.引入jar <!--  引入redis依赖 --><dependency>    <groupId>org.springf ...

  9. Geoserver跨域请求设置

    使用OpenLayers请求GeoServer发布的WFS服务时,如果不是相同的域可能会出现如下问题. 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8080/geoserv ...

  10. android studio 在线更新android sdk,遇到无法Fetching https://dl-ssl.google.com/...的解决方案

    最近实在受不了eclipse的“迟钝”,准备入手Android studio开发环境,但是貌似不太顺利,成功安装了Android studio,在线更新Android adk的时候,总是遇到如下错误: ...