在写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. BZOJ4010 [HNOI2015]菜肴制作 【拓扑排序 + 贪心】

    题目 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...

  2. 学习 JSP:第二步 创建一个JSP Web Project

    接上文 学习 JSP:第一步Eclipse+Tomcat+jre(配置环境) [创建新工程](Dynamic Web Project) 1.选择 "File-->New-->Dy ...

  3. Failed to apply plugin [id 'com.gradle.build-scan']

    把spring源码clone下来之后,使用gradle编译不通过,异常日志如下: FAILURE: Build failed with an exception. * Where: Build fil ...

  4. FOJ Problem 2261 浪里个浪

                                                                                                        ...

  5. POJ 3037 Skiing

    Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4810   Accepted: 1287   Special ...

  6. hdu 5976 Detachment 脑洞题 猜结论

    题目链接 题意 将\(x\)拆成\(a_1+a_2+...+\)的形式,且\(a_1\lt a_2\lt...\),使得\(a_1*a_2*...\)取到最大值 思路 大胆猜结论. 首先拆分的形式中肯 ...

  7. mongodb window安装学习

    https://blog.csdn.net/u011692780/article/details/81223525 教程:http://www.runoob.com/mongodb/mongodb-t ...

  8. configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

    configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. 一.错误发生情景: 在安装gcc时,执行.c ...

  9. Day 17 编码+文本编辑+函数

    知识点篇: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017/ ...

  10. HDU 1394:Minimum Inversion Number(树状数组,线段树)[水]

    题意:有0~n-1这n个数,以一定的排列.这个排列可以循环,就是可以把第一个拿到最后,然后形成新的排列.问这些排列中的逆序对最小值. 思路: 最后的循环,拿走一个之后,新的逆序对数 newsum = ...