react的使用: React如何渲染UI

这篇文章给大家介绍的内容是关于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 APIconst 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 = (  

Hello, world!

);

登录后复制

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

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

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

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

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

const element =

Hello, world

;// 使用 ReactDOM.render APIReactDOM.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 }

登录后复制

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

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

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

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

03. 小结

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

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

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

相关推荐:

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

以上就是react的使用: React如何渲染UI的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2745728.html

(0)
上一篇 2025年3月8日 03:48:35
下一篇 2025年3月5日 00:17:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • React的使用:React组件内部的状态管理

    这篇文章给大家介绍的内容是关于React的使用:React组件内部的状态管理,有着一定的参考价值,有需要的朋友可以参考一下。 在本文中,我们将把目光聚焦于 React 组件内部的状态管理,去认识或重新思考以下三个核心概念: props 和 …

    编程技术 2025年3月8日
    200
  • vue-cli的单元测试的示例解析

    这篇文章给大家介绍的内容是关于vue-cli的单元测试的示例解析,有着一定的参考价值,有需要的朋友可以参考一下。 vue-cli的单元测试 最近项目开发临近结尾,反思之前做的不足的地方,想着应该引入测试类的做法,于是乎开始学习前端测试之类的…

    编程技术 2025年3月8日
    200
  • JavaScript中Object.defineProperty()方法的解析

    这篇文章给大家介绍的内容是关于javascript中object.defineproperty()方法的解析,有着一定的参考价值,有需要的朋友可以参考一下。 =与Object.defineProperty 为JavaScript对象新增或者…

    编程技术 2025年3月8日
    200
  • js如何实现将上传图片并且压缩的方法

    这篇文章给大家介绍的内容是关于js上传图片压缩,有着一定的参考价值,有需要的朋友可以参考一下。 js实现图片压缩后上传 用到的技术: canvas相关api html5的一些api 兼容性: 点击下载“嗨格式压缩大师”; h5没发现问题,p…

    编程技术 2025年3月8日
    200
  • js实现重建二叉树的算法解析

    这篇文章给大家介绍的内容是关于js实现重建二叉树的算法解析,有着一定的参考价值,有需要的朋友可以参考一下。 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前…

    编程技术 2025年3月8日
    200
  • React中动画不生效的原因分析

    这篇文章给大家介绍的内容是关于react中动画不生效的原因分析,有着一定的参考价值,有需要的朋友可以参考一下。 项目中需要做这样的一个组件根据不同的数值,这个蓝色的条显示的宽度不同。这个其实很简单,我只要根据数据动态的计算它的宽度,生成节点…

    编程技术 2025年3月8日
    200
  • React Event事件注册的实现

    这篇文章给大家介绍的内容是关于react event事件注册的实现,有着一定的参考价值,有需要的朋友可以参考一下。 React 元素的事件处理和 DOM元素的很相似。但是有一点语法上的不同: React事件绑定属性的命名采用驼峰式写法,而不…

    2025年3月8日
    200
  • 原生JS如何动态加载JS和CSS文件以及代码脚本

    这篇文章给大家介绍的内容是关于原生js如何动态加载js和css文件以及代码脚本,有着一定的参考价值,有需要的朋友可以参考一下。 DOM readyState属性共5中状态 uninitialized:初始状态 loading:documen…

    编程技术 2025年3月8日
    200
  • JS作用域和面向对象的进一步解析

    以上就是JS作用域和面向对象的进一步解析的详细内容,更多请关注【创想鸟】其它相关文章!

    编程技术 2025年3月8日
    200
  • 浅析javascript中事件流的内容

    这篇文章给大家介绍的内容是关于浅析javascript中事件流的内容,有着一定的参考价值,有需要的朋友可以参考一下。 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行,事件是可以被 JavaScript 侦测到的行为 绑定事件…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论