详解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实现DIV的一些简单控制
Jun 04 Javascript
JavaScript 图片预览效果 推荐
Dec 22 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
May 05 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
Aug 31 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
发布一款npm包帮助理解npm的使用
Jan 03 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 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
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
php实现三级级联下拉框
2016/04/17 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Vuex提升学习篇
2018/01/11 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python zip函数打包元素实例解析
2019/12/11 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
django迁移文件migrations的实现
2020/03/31 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
HashMap和Hashtable的区别
2013/05/18 面试题
家庭教育先进个人事迹材料
2014/01/24 职场文书
收银员岗位职责
2014/02/07 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
新店开张活动方案
2014/08/24 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
老兵退伍感言
2015/08/03 职场文书
情况说明书怎么写
2015/10/08 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
TS 类型收窄教程示例详解
2022/09/23 Javascript