搜索
首页web前端js教程react的使用: React如何渲染UI

react的使用: React如何渲染UI

Jul 20, 2018 am 10:37 AM
javascriptreact.js

这篇文章给大家介绍的内容是关于react的使用: React如何渲染UI,有着一定的参考价值,有需要的朋友可以参考一下。

01. React 渲染界面的方式

在 React 等大型前端框架出现之前,我们渲染 UI 元素的方式是使用字符串模板。而在 React 中,我们通过使用JavaScript 对象来渲染 UI 元素。

在上一章我们提到过,React 为了节省频繁操作 DOM 所耗费的前端性能,提出了虚拟DOM的概念,在这里我们所创建的 JavaScript 对象即是用来描述“页面看起来是什么样子”的虚拟DOM节点。“虚拟DOM”是如何最终转化为“真实DOM“并展现在浏览器中的呢?这里面的复杂工作(操作 DOM 树,添加节点)由 React 完成。

让我们先看看如何通过一个 JavaScript 对象创建一个虚拟的DOM节点(即 React 元素):

// 为了创建一个 React 元素,我们需要使用 React.createElement API
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

该 API 最终会返回一个大致如下格式的 JavaScript 对象:

const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world'
  }
};

React 会为这个 JavaScript 对象在生成的虚拟DOM树上找到一席之地,并最终和浏览器中的真实 DOM 树合并,渲染视图。

然而在实际开发中,你几乎不会使用到 React.createElement API,而是像下方这样创建 React 元素:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

这种创建方式是通过一种叫做 JSX 的 JavaScript 语法扩展实现的,而对于 JSX 的概念在这里我就不再进一步阐述了,你大可以将它理解为一种简洁,高效创建 React 元素的语法糖,用来更加优雅的构建整个应用的虚拟 DOM。

值得一提的是,JSX 并不是 React 框架的一部分(这源于 React 代码组织上尽量分而治之的哲学),因此 React 并不像负责合并虚拟DOM与真实DOM那样,负责将由 JSX 语法写成的代码转化为使用了 React.createElement API 的 JavaScript 对象。

那谁来做这件事呢?答案是 Babel。而通常,我们使用 webpack 来打包我们的 JavaScript代码并输送至 Babel 进行转译。现在你明白了,为什么 ReactwebpackBabel总是像连体婴儿一样出现在一起。

到目前为止,我们已经知道如何创建 React 元素了,但实际上我们只是“创建“而已,离元素被真正展现在浏览器上,还查了关键的一步”渲染“。

在这里我们加快脚步,想要将之前创建好的 React 元素渲染出来,我们需要使用如下代码:

<p id="root"></p>

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

// 使用 ReactDOM.render API
ReactDOM.render(
  element,
  document.getElementById('root')
);

没错,id 为 root 的 DOM元素将会成为整个虚拟DOM树的根节点。至此,我们已经掌握了把 React 元素转换为虚拟DOM节点,再在浏览器上渲染出该元素的整个流程。然而,只是能够使用 React 渲染视觉元素还远远谈不上发挥了 React 的价值。别忘了 React 是作为大型前端框架存在的(虽然相较于其他大型前端框架,它的组件并不完备),React 的真正价值在于:使用 React 元素简洁,高效的实现各种复杂的业务逻辑

如何做到这一点呢?答案是使用React 组件

02. React 组件

React 组件不仅可以使我们有能力打包一堆视觉元素而且还可以使我们有能力打包一系列相对应的交互行为。可以说:React 组件是构成 React 应用的基石

那什么是 React 组件呢?你可以想象 React 组件就像是一个工厂,它接收一些列被称为属性的物料,最终生产(返回)React 元素/组件。

让我们换个角度说,React 组件本质上就是一个 JavaScript 函数,它接收一系列参数,返回 React 元素/组件。让我们看看它是被如何书写的:

import React form 'react'
import ReactDOM form 'react-dom'

function Button(props) {
    return <button>{props.buttonName}</button>
}

看到了吗,React 组件完全符合之前我们提到过的组件化思想,接收参数,返回UI元素。

以组件化的角度思考构建 React 应用是一个非常棒的想法,因为组件化就意味着模块化与可重用性。组件类就像是一个工厂生产组件的实例,这些组件类完全符合”单一响应原则“与”DOT“原则。

在 React 的官方文档中,大量的 React API 是关于组件的。因此组件是 React 非常重要的一个概念,从本质上说,组件是 React 给予我们的主要的封装单元。通过一个个组件,我们能像搭积木一样快速搭起一个拥有复杂交互逻辑和视觉界面的大型应用,并且应用中的每个视觉单元又拥有着非常清晰的责任。

希望到这里你能体会到 React 在构建大型应用时的价值了,它使我们能够关注于应用中的一小部分,而不会无意中影响到应用的其余部分(即每个组件都符合了”高内聚,低耦合“的原则)。使用 React,我们更容易写出清晰,优雅的代码。

03. 小结

最后,让我们再次总结在 React 中使用组件渲染界面的两点优势:

  1. 易于重用:我们可以在任何时间地点调用一个组件;

  2. 方便定制:通过给予组件不同属性,我们可以获得不同的 UI 元素;

相关推荐:

React的使用:react框架的五大特点

以上是react的使用: React如何渲染UI的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python vs. JavaScript:社区,图书馆和资源Python vs. JavaScript:社区,图书馆和资源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C到JavaScript:所有工作方式从C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript引擎:比较实施JavaScript引擎:比较实施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

超越浏览器:现实世界中的JavaScript超越浏览器:现实世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

使用Next.js(后端集成)构建多租户SaaS应用程序使用Next.js(后端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

如何使用Next.js(前端集成)构建多租户SaaS应用程序如何使用Next.js(前端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:22 AM

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript:探索网络语言的多功能性JavaScript:探索网络语言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的演变:当前的趋势和未来前景JavaScript的演变:当前的趋势和未来前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。