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 ...
随机推荐
- [转] Makefile 基础 (4) —— Makefile 书写命令
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- jenkins下添加HTML Publisher Plugin及配置
1.点击“系统设置”->“插件管理”,点击可选插件,搜索插件,如下: 2.点击直接安装,等待安装完成,如下: 3.在配置job中,在构建后操作,选择安装的HTML Publisher plugi ...
- Fiddler修改请求的参数,重新执行请求
打开Fiddler4,打开浏览器,输入请求地址,例如:http://www.meizu.com 1. 拿出host信息:tongji.meizu.com 2. 拿出URL信息:/flow/mc?v ...
- 解决 Jackson反序列化 Unexpected token ... , expected VALUE_STRING: need JSON String that contains type id (for subtype of ...)
首先检查是否是 objectMapper.enableDefaultTyping(); 的受害者.优先考虑删除该配置. 使用Jackson把数组的json字符串反序列化为List时候报了个JsonMa ...
- Blog 081018
对于 linux 系统 api, 尝试理解函数参数和函数之间的内在联系,为什么要用这些参数而不是另一些参数,了解 api 之间的一些共性. 一个扩展性良好的程序,结构都有一些共性,就像是一个国家,有好 ...
- [LeetCode] Jump Game 数组控制
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 46深入理解C指针之---内存分析
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- 用户空间使用i2c_dev
============================================作者:yuanluluhttp://blog.csdn.NET/yuanlulu 版权没有,但是转载请保留此段声 ...
- js-触屏滑动判断滑动方向(移动版)
var startx, starty; //获得角度 function getAngle(angx, angy) { return Math.atan2(angy, angx) * 180 / ...
- 树(弱化版)(lca)
3306: 树 时间限制: 10 Sec 内存限制: 256 MB 题目描述 给定一棵大小为 n 的有根点权树,支持以下操作: • 换根 • 修改点权 • 查询子树最小值 输入 第一行 ...