在写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. [转] Makefile 基础 (4) —— Makefile 书写命令

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

  2. jenkins下添加HTML Publisher Plugin及配置

    1.点击“系统设置”->“插件管理”,点击可选插件,搜索插件,如下: 2.点击直接安装,等待安装完成,如下: 3.在配置job中,在构建后操作,选择安装的HTML Publisher plugi ...

  3. Fiddler修改请求的参数,重新执行请求

    打开Fiddler4,打开浏览器,输入请求地址,例如:http://www.meizu.com 1.  拿出host信息:tongji.meizu.com 2.  拿出URL信息:/flow/mc?v ...

  4. 解决 Jackson反序列化 Unexpected token ... , expected VALUE_STRING: need JSON String that contains type id (for subtype of ...)

    首先检查是否是 objectMapper.enableDefaultTyping(); 的受害者.优先考虑删除该配置. 使用Jackson把数组的json字符串反序列化为List时候报了个JsonMa ...

  5. Blog 081018

    对于 linux 系统 api, 尝试理解函数参数和函数之间的内在联系,为什么要用这些参数而不是另一些参数,了解 api 之间的一些共性. 一个扩展性良好的程序,结构都有一些共性,就像是一个国家,有好 ...

  6. [LeetCode] Jump Game 数组控制

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. 46深入理解C指针之---内存分析

    一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...

  8. 用户空间使用i2c_dev

    ============================================作者:yuanluluhttp://blog.csdn.NET/yuanlulu 版权没有,但是转载请保留此段声 ...

  9. js-触屏滑动判断滑动方向(移动版)

    var startx, starty; //获得角度 function getAngle(angx, angy) {     return Math.atan2(angy, angx) * 180 / ...

  10. 树(弱化版)(lca)

    3306: 树 时间限制: 10 Sec  内存限制: 256 MB 题目描述 给定一棵大小为 n 的有根点权树,支持以下操作:  • 换根  • 修改点权      • 查询子树最小值 输入 第一行 ...