React机制浅析
在写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机制浅析的更多相关文章
- Linux模块机制浅析
		Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核的目的.一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析. 模块的Hello World! ... 
- typecho流程原理和插件机制浅析(第二弹)
		typecho流程原理和插件机制浅析(第二弹) 兜兜 393 2014年04月02日 发布 推荐 1 推荐 收藏 14 收藏,3.7k 浏览 上一次说了 Typecho 大致的流程,今天简单说一下插件 ... 
- typecho流程原理和插件机制浅析(第一弹)
		typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ... 
- oracle的resetlogs机制浅析
		oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?它的原理 ... 
- webpack模块机制浅析【一】
		webpack模块机制浅析[一] 今天看了看webpack打包后的代码,所以就去分析了下代码的运行机制. 下面这段代码是webpack打包后的最基本的形式,可以说是[骨架] (function(roo ... 
- InnoDB的锁机制浅析(五)—死锁场景(Insert死锁)
		可能的死锁场景 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意 ... 
- InnoDB的锁机制浅析(四)—不同SQL的加锁状况
		不同SQL的加锁状况 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/ ... 
- InnoDB的锁机制浅析(三)—幻读
		文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁) Inno ... 
- InnoDB的锁机制浅析(二)—探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁)
		Record锁/Gap锁/Next-key锁/插入意向锁 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Recor ... 
随机推荐
- BZOJ 4821 [Sdoi2017]相关分析 ——线段树
			打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ... 
- BZOJ2938 [Poi2000]病毒  【AC自动机】
			题目 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在 ... 
- mybatis学习(十二)——mybatis逆向工程
			MyBatis Generator (MBG)是一个mabatis的代码生成器,能够根据表自动生成mapper接口,mapper.xml文件,javaBean文件. 1.MBG的下载 打开https: ... 
- php的异常处理
			https://my.oschina.net/sallency/blog/837615 
- hdu 3613 KMP算法扩展
			Best Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ... 
- 使用 new Q_max_capacity 參數,同樣 loading 下,粗估耗電量(UI 上的 %)。
			Precondition : 除了 Q_max 外,其它參數皆同. old Q_max_capacity : 1500 mAh new Q_max_capacity : 2200 mAh 有一個 lo ... 
- Codeforces 403D: Beautiful Pairs of Numbers(DP)
			题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容 ... 
- LeetCode OJ-- Trapping Rain Water*
			https://oj.leetcode.com/problems/trapping-rain-water/ 模拟题,计算出在凹凸处存水量. 对于一个位置 i ,分别计算出它左边的最大值 left (从 ... 
- Redis监控工具—Redis-stat、RedisLive
			Redis监控工具—Redis-stat.RedisLive https://blog.csdn.net/u010022051/article/details/51104681 
- 小程序 之使用HMACSHA1算法加密报文
			首先说说我们前端常用的加密技术, 我们常用的加密技术有:如MD5加密,base64加密 今天要说的是HMACSHA1加密技术 先介绍下什么是SHA1算法, 安全哈希算法(Secure Hash Alg ... 
