详解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 相关文章推荐
js与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
微信小程序版翻牌小游戏
Jan 26 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 Javascript
JS数据类型分类及常用判断方法
Nov 19 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执行速度全攻略
2006/10/09 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
浅谈javascript面向对象程序设计
2015/01/21 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
2020/04/27 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
django 消息框架 message使用详解
2019/07/22 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
中学老师的自我评价
2013/11/07 职场文书
消防先进事迹材料
2014/02/10 职场文书
《问银河》教学反思
2014/02/19 职场文书
金融专业求职信
2014/08/05 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
高中生旷课检讨书
2014/10/08 职场文书
作文评语怎么写
2014/12/25 职场文书
公司车辆管理制度
2015/08/04 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书