React文档(四)渲染元素

时间:2022-10-26 19:12:21

元素是React应用的最小单位。

一个React元素描述了你在屏幕上所看到的东西:

const element = <h1>Hello, world</h1>;

和浏览器页面中的DOM元素不同,React元素是普通的对象,创建起来很方便。React DOM负责处理根据React元素来更新DOM。

笔记:

你也许会困惑元素和另外一个广为人知的概念“组件”有什么区别。我们会在下一章节介绍组件。组件由元素组成,我们建议你看完本章节再看下一章节。

渲染React元素到DOM

让我们假设有一个<div>元素在你的HTML页面里:

<div id="root"></div>

我们把这个div叫做根节点因为在这个div里的所有元素都由React DOM管理。

如果只使用React创建应用通常只有一个根节点。如果你将React整合进一个已经存在的应用,可能会存在很多彼此隔离的根节点。

将一个React元素渲染到根节点里,通过ReactDOM.render():

const element = <h1>Hello, world</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);

在CodePen里试一试

它会在页面上显示 “Hello World”。

更新已经渲染的元素

React元素是不可改变的。一旦你创建了一个元素,你就不能修改它的属性或者子元素。一个元素就好像一部电影中的一帧画面:它代表在一个确切时间点下的UI。

根据目前我们已知的知识,唯一可以更新UI的方法就是创建一个新的元素,然后将它传递给ReactDOM.render()。

看看这个时钟的例子:

function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(
element,
document.getElementById('root')
);
} setInterval(tick, 1000);

在CodePen中试一试

它利用setInterval()定时器的回调每一秒都会调用一次ReactDOM.render()来更新DOM。

笔记:

在实际使用的时候,大多数React应用只调用一次ReactDOM.render()一次。下一章节我们会学习这些代码如何被包裹在有状态的组件之中。

建议不要跳章节学习因为知识点彼此关联。

React只更新必要的东西

React DOM会将元素和子元素与之前的状态比较,然后只更新必要的部分使DOM变为所希望的状态。

你可以通过检查浏览器开发者工具来验证刚才那个例子:

React文档(四)渲染元素

即使每一秒我们都会重新新建整个UI树,但是只有时间那个文本节点被React DOM更新。

根据我们以往的经验,将界面视为一个个特定时刻的固定内容(就像一帧一帧的动画),而不是随时处于变化之中(而不是处于变化中的一整段动画),将会有利于我们理清开发思路,减少各种bugs。

React文档(四)渲染元素的更多相关文章

  1. React文档(十三)思考React

    在我们的看来,React是使用js创建大型快速网站应用的首要方法.它在Facebook和Instagram的使用已经为我们展现了它自己. React的一个很好的地方就在于当你创建应用的时候它使你思考如 ...

  2. 中文翻译:pjsip文档&lpar;四&rpar;之ICE Session的使用方法

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  3. dom4j解析xml报&quot&semi;文档中根元素后面的标记格式必须正确&quot&semi;

    今天,在写个批量启动报盘机的自动化应用,为了简化起见,将配置信息存储在xml中,格式如下: <?xml version="1.0" encoding="UTF-8& ...

  4. 在DHTML中把整个文档的各个元素作为对象处理的技术是:()

    在DHTML中把整个文档的各个元素作为对象处理的技术是:() A.HTML B.CSS C.DOM D.Script(脚本语言) 解答:C DOM:文档对象模型

  5. idea导入项目报错:文档中根元素前面的标记必须格式正确

    今天从git上面导入项目之后,由于是上周刚刚提交过的,本地也没有什么修改,于是就从gitlab上面直接下载下来了.可是项目启动时候,报错了... 文档中根元素前面的标记必须格式正确 想想 原来是上次提 ...

  6. javaScript获取文档中所有元素节点的个数

    HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. 解决Spring的java项目打包后执行出现&OpenCurlyDoubleQuote;无法读取方案文档&period;&period;&period;&OpenCurlyDoubleQuote;、&OpenCurlyDoubleQuote;原因为 1&rpar; 无法找到文档&semi; 2&rpar; 无法读取文档&semi; 3&rpar; 文档的根元素不是&period;&period;&period;”问题

    问题 一个用Spring建的java项目,在Eclipse或idea中运行正常,为什么打包后运行出现如下错误呢? 2019/07/10/19:04:07 WARN [main] org.springf ...

  8. XML 文档包含 XML 元素。

    XML 文档包含 XML 元素. 什么是 XML 元素? XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分. 元素可包含其他元素.文本或者两者的混合物.元素也可以拥有属性. < ...

  9. React文档(二十四)高阶组件

    高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑.HOCs本质上不是React API的一部分.它是从React的组合性质中显露出来的模式. 具体来说,一个高阶组件就是一个获取一个组件 ...

  10. React文档(八)条件渲染

    在React中,你可以创建不同的组件各自封装你需要的东西.之后你可以只渲染其中的一部分,这取决于应用的state(状态). 条件渲染在React里就和js里的条件语句一样.使用js里的if或者条件表达 ...

随机推荐

  1. IT人经济思维之投资 - 创业与投资系列文章

    前面笔者写过一个文(IT从业者的职业规划),主要通过笔者的从业道路的经验,介绍了IT从业者的职业选择道路问题,主要从技术.业务和管理三大方面进行了描述.然后,通过文(IT从业者的职业道路(从程序员到部 ...

  2. easyui datagrid 分页

    //初始化dategrid $('#tt').datagrid({ url:null, pagination:true, pageSize:, pageNumber:, rownumbers:true ...

  3. JAVA&lowbar;Java中关于supper和this的理解

    2015-04-04 Created By BaoXinjian

  4. Linux下一个C(编程入门&period;h档,&period;c档,而路多文件的调用)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  5. ZOJ - 3261 逆向并查集

    思路:很巧妙的解法.如果按照常规一边读入,一边合并并查集,删边实在没办法做. 首先读入所有的操作,把所有不会被删除的边加入并查集,然后从最后一个操作开始逆向操作,当遇到删边操作,就直接把这条边加入并查 ...

  6. 跨平台移动APP开发进阶&lpar;三&rpar;hbuilder&plus;mui mobile app 开发心酸路

    注:请点击此处进行充电! 1.问题描述:在实现图片轮转时,若将 <script type="text/javascript"> mui("#slider&qu ...

  7. H5新特性总结

    Web前端最新的官方标准无疑就是es6和H5了,es6之前已经说过了(多是一些语法糖),现在来总结一下H5给我们来了哪些新“朋友”吧~ 1.video/radio  视频/音频 2.canvas 绘画 ...

  8. python base64加密文本内容(2)

    上面一篇简单进行了base64加密 但安全系数非常低,只需要用网上的在线base64解码就能破解 这里我们可以自己修改一下base64加密后的字符串,在解码的时候只需要先提前将修改的内容还原就可以了 ...

  9. loj 10004 智力大冲浪

    智力大冲浪 题目描述: 小伟报名参加*电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的.接下来主持人宣布了 ...

  10. file&lowbar;get&lowbar;post实现post请求

    function Post($url, $post = null){     $context = array();     if (is_array($post)) {       ksort($p ...