详解React 元素渲染


Posted in Javascript onJuly 07, 2020

元素是构成 React 应用的最小单位,它用于描述屏幕上输出的内容。

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

与浏览器的 DOM 元素不同,React 当中的元素事实上是普通的对象,React DOM 可以确保 浏览器 DOM 的数据内容与 React 元素保持一致。

将元素渲染到 DOM 中

首先我们在一个 HTML 页面中添加一个 id="example"<div>:

<div id="example"></div>

在此 div 中的所有内容都将由 React DOM 来管理,所以我们将其称为 "根" DOM 节点。

我们用 React 开发应用时一般只会定义一个根节点。但如果你是在一个已有的项目当中引入 React 的话,你可能会需要在不同的部分单独定义 React 根节点。

要将React元素渲染到根DOM节点中,我们通过把它们都传递给 ReactDOM.render() 的方法来将其渲染到页面上:

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

详解React 元素渲染

更新元素渲染

React 元素都是不可变的。当元素被创建之后,你是无法改变其内容或属性的。

目前更新界面的唯一办法是创建一个新的元素,然后将它传入 ReactDOM.render() 方法:

来看一下这个计时器的例子:

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

运行结果

详解React 元素渲染

以上实例通过 setInterval() 方法,每秒钟调用一次 ReactDOM.render()。

我们可以将要展示的部分封装起来,以下实例用一个函数来表示:

function Clock(props) {
 return (
  <div>
   <h1>Hello, world!</h1>
   <h2>现在是 {props.date.toLocaleTimeString()}.</h2>
  </div>
 );
}
 
function tick() {
 ReactDOM.render(
  <Clock date={new Date()} />,
  document.getElementById('example')
 );
}
 
setInterval(tick, 1000);

除了函数外我们还可以创建一个 React.Component 的 ES6 类,该类封装了要展示的元素,需要注意的是在 render() 方法中,需要使用 this.props 替换 props:

class Clock extends React.Component {
 render() {
  return (
   <div>
    <h1>Hello, world!</h1>
    <h2>现在是 {this.props.date.toLocaleTimeString()}.</h2>
   </div>
  );
 }
}
 
function tick() {
 ReactDOM.render(
  <Clock date={new Date()} />,
  document.getElementById('example')
 );
}
 
setInterval(tick, 1000);

以上就是详解React 元素渲染的详细内容,更多关于React 元素渲染的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
Javascript对象中关于setTimeout和setInterval的this介绍
Jul 21 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
js正则表达式中test,exec,match方法的区别说明
Jan 29 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
JS动态添加iframe的代码
Sep 14 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
Dec 31 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
JS数据类型判断的几种常用方法
Jul 07 #Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 #Javascript
jQuery 实现扁平式小清新导航
Jul 07 #jQuery
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 #Javascript
JS实现移动端可折叠导航菜单(现代都市风)
Jul 07 #Javascript
React+EggJs实现断点续传的示例代码
Jul 07 #Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 #Javascript
You might like
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
python通过floor函数舍弃小数位的方法
2015/03/17 Python
深入解析Python中的urllib2模块
2015/11/13 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python微信公众号开发简单流程
2018/03/23 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
美国轮胎网站:Priority Tire
2018/11/28 全球购物
消防安全宣传口号
2014/06/10 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
小学运动会宣传稿
2015/07/23 职场文书
开业庆典致辞
2015/08/01 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
使用numpy nonzero 找出非0元素
2021/05/14 Python
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android