详解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使用include/require
Nov 13 Javascript
js charAt的使用示例
Feb 18 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
noty ? jQuery通知插件全面解析
May 18 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 Javascript
详解Vue This$Store总结
Dec 17 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 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
mysql 搜索之简单应用
2007/04/27 PHP
php中的数组操作函数整理
2008/08/18 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Python使用python-docx读写word文档
2019/08/26 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
Prototype如何更新局部页面
2013/03/03 面试题
竞选卫生委员演讲稿
2014/04/28 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
三好生演讲稿
2014/09/12 职场文书
师范生见习报告
2014/10/31 职场文书
2014年个人年终总结
2015/03/09 职场文书
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android