当前位置: 首页 > 网络应用技术

[翻译]反应18个新功能概述

时间:2023-03-05 19:48:09 网络应用技术

  大家好,我是加菲尔德(Garfield)。当反应17去年发行时,每个人都曾经说过“新功能”,因为没有针对开发人员的新功能,它主要集中于升级和简化自身。那么新功能是什么即将到来的React 18?

  React的官方团队最近建立了React 18工作组,并于6月9日发布了React 18发布计划:

  目前,可以使用Alpha版本,您可以将其从NPM撤下以进行查看,但是您需要带上标签:

  React 18工作组邀请社区专家,图书馆作者和开发团队成员在Alpha阶段参加试验并提供反馈。后来的Beta版会议邀请更多人参加讨论。单击下面的链接以查看讨论内容:

  https://github.com/reaectwg/reaeact-18/discussions

  让我们一起阅读一篇文章,以了解React 18的新功能。

  在讨论React 18的新功能之前,让我们首先了解一些概念:服务器侧渲染,悬念,水合。如果您已经非常熟悉这些概念,则可以跳过此内容。

  服务器端渲染

  在传统的前端项目中,当浏览器请求页面时,服务器将响应一系列文件,其中包含一个几乎空的HTML文档和整个应用程序内容。前端应用程序在路由下呈现相应的内容用户的请求,该请求称为客户端位点渲染(CSR)(CSR)。渲染应用程序以显示内容。用户将首先看到一个空白页。页面的初始加载时间(即第一个屏幕时间)取决于客户端的网络速度以及需要下载和解析的文件大小。

  翻译说明:随着前端应用程序的复杂性继续增加,如果整个应用程序也被包装成大量的,它将非常巨大,无论是加载和解决方案。项目采用了按需加载的策略,该策略将被分为多个。根据当前页面所需的内容返回服务器。这可以大大提高第一个屏幕加载速度。

  服务器大小渲染(SSR)允许在服务器端动态生成HTML文档。当浏览器请求页面时,服务器将首先获取页面所需的数据,然后呈现初始的HTML文档。此HTML文档以包含整个应用程序逻辑为响应内容的文件发送给客户端。这次,浏览器渲染了一些已经具有某些内容的HTML文档,并且用户将看不到空白页面。应用程序逻辑将为分析完成后添加到应用程序中。

  水合

  如果您的应用程序包含大量内容,或者您希望用户在弱网络环境中,那么使用SSR是有意义的,因为它可以提供更好的用户体验。在加载过程中,即使用户可以浏览内容,即使整个应用程序未正常运行(目前该页面无法交互)。加载应用程序逻辑时,渲染了React组件,并且事件处理函数绑定到服务器呈现的HTML节点。这个过程称为水合(用中文翻译)。将其构想为压缩毛巾或泥炭球。这两种产品在保湿水之前没有效果。

  亚台词

  尽管它看起来像是一种聪明的魔术,但使用SSR时可能会遇到一些瓶颈。等待该过程完成。同时,在水合开始之前,必须加载所有应用程序逻辑。此外,在用户可以启动交互之前,所有(页面元素)必须完成水合。React团队在2018年介绍了悬念组件。允许组件等待懒惰加载组件中的异步操作的结果时,显示了后备UI。当它改变了React 18中的行为时,我们将在下一节中进行讨论。

  React App是通过将根元素(顶部组件)安装到DOM创建的。如果您使用脚手架来创建项目,则可以在文件中找到和关联,看起来像这样:

  新的root API使用新的根元素,然后React应用程序呈现内部渲染:

  但是为什么很重要?它的大多数好处都隐藏在幕后。为了能够使用盒子的改进-out -of -box改进,您需要将项目中的旧root API切换到一个新的根API。

  一旦您升级到React18并开始使用新的根API,这些改进将被动地发生(幕后)。如上所述,如果您继续使用旧的API,您将无法获得这些好处,所以请检查您的文件并在需要时进行更新。但是即使您不这样做,您的应用程序也不会被中断,因此一切都很好。

  i?自动批处理(自动批准)批处理处理是反应在幕后做的,许多开发人员没有意识到这一点。当您注意开发人员控制台时,您会意识到,如果您在同一事件中运行一系列状态更新,处理功能,即使您有两个状态更新,REECT也只会渲染UI一次。这意味着将它们放在批处理(或组)中,因此将其更新并以连续重复状态重新授予UI。

  批处理处理是一种很好的机制,可以保护我们免受不必要的UI的重新施用,但是React 17仅在事件处理功能中实现。前答链,异步代码或本机事件处理功能的使用将破坏此行为(批处理处理在这些情况下)。在React 18中,自动批处理处理将自动完成本机事件处理功能,Promise Chain和异步代码中的功能,Promise链和异步代码。

  如果需要,则可以使用出口自动批处理处理,但是React团队不经常建议。

  单击此处查看React团队对自动批处理处理的说明。

  翻译注:建议查看教师卡歌曲的文章

  如果函数组件/类组件的函数返回或不返回任何内容,则允许组件在React 18之前呈现不确定在忘记返回他们在组件中创建的元素的开发人员中。

  先前版本的悬念支持SSR的反应不支持服务器上的悬疑。新API提供了完整的SPSpense支持和HTML流。

  在React 17中,如果尝试将不令人满意的悬念加载异步,例如,将组件加载,它将在其上找到最近的悬念边界并渲染后备UI,直到加载该组件。但是,如果没有悬念,在其上,将丢弃一个误差。

  上一个版本中的无效或未定义的悬念后备,如果悬念边界没有通过后卫支柱,或者通过的后备为,则将忽略整个悬念并使用下一个悬念边界。如果没有边界,将是一个错误,将是一个错误抛出。反应18,即使退缩是通过或或或。在加载异步组件之前,不会呈现此悬浮边界。

  在编程领域,并发是能够同时执行多个任务的能力。因为React在单个线程上运行,它必须决定要做什么顺序。要完成此目的,React使用dispatcher,这是回调注册表(就像在node.js中调用stack)。在先前的React版本中,此API完全无法触及开发人员。回答18添加了一些可选的并发性,可以更智能地呈现内容并揭示此API的某些部分。特征支持多任务,基于优先级的渲染,调度和允许中断的协作,因此它们大大改善了用户体验。

  React还在版本16.3中引入,默认情况下是禁用的。它的创建是警告开发人员使用不兼容的代码。如果使用并发功能,这些代码可能会将错误引入应用程序。因此,React团队决定构建并发功能而不是并发模式,并允许使用一小部分使用并发功能而不是整个应用程序。

  因此,尽管API已将整个应用程序更改为其SO称为并发模式,但该组件的呈现与往常一样,除非您使用下面说明的并发函数。如果您在组件,组件和组件中使用并发函数它的整个子程序将同时介绍,并同时启用它们。

  r的启动转移曾经在反应之前具有非常重要的规则:没有什么可以干扰呈现的。互动事件)。对于新的更新,每个状态更新均被归类为以下两个类别之一:紧急更新或过渡更新(过渡(过渡)。agrencency更新是用户在心跳中直观的操作,例如鼠标单击或键。变换更新是一些延迟操作,在许多情况下可以预期搜索查询。API用于将内部设置称为过渡,这意味着可以中断它们。过渡更新。同时也可以同时运行,但是在操作过程中,UI并未阻止。

  上面的示例来自reactwg github讨论页面。如果未标记为过渡更新,则在更改每个输入后将锁定UI。现在将其标记为非静音。用户可以搜索某些东西并改变他们的意见。在根据输入更改更新UI之前,它决定导航到另一个页面,而无需等待不感兴趣的UI更新。

  您甚至可以使用钩子跟踪过渡更新状态,并根据需要显示您已加载给用户的UI:

  看看对并发和特征的惊人解释以及起始转移的真实例子。

  翻译注:建议查看教师卡歌曲的文章

  二手ferredvalue挂钩可以帮助您在指定的时间段内延迟更新UI的某些部分并保持页面响应。您还可以给它一个可选的超时。回答会尽快更新延迟值。如果不是在给定超时期间完成,它将被迫在过程中更新和阻止UI。换句话说,延迟值通过过渡更新而不是紧急更新更新,因此您的UI在此过程中保留响应。

  检查React的官方文档以获取更多信息和示例。

  吊销者允许您协调包装的子树的悬念节点的内容的顺序,即使以不同的顺序达到数据。通常,如果您在同一级别上有多个悬疑边界,它们将尽可能地解决它们。

  在上面的示例中,即使第三个项目首先加载,它也会渲染直到第一个项目加载。加载第一个项目时,将介绍第一个项目,第二个和第三个后备。仅当第二个项目为加载的三个项目可以渲染。

  道具可以采用该值,并解决并允许内部悬念边界按前向和向后的顺序执行解决方案。另一方面,它将等待所有边界解析,然后再渲染。

  您也可以通过Supstenselist上的道具。Prop可以采用该值。默认情况下,Sustenselist呈现所有后备。但是,如果您不想渲染任何后备,则可以使用它。如果您只想渲染一个后备,就可以使用它。这样,您可以创建许多后备,而不必担心加载区域会变得混乱。

  检查React文档以获取更多信息和示例。

  如我们之前在概念部分中讨论的那样,带有选择性水合的流HTML,服务器渲染遵循以下步骤:

  步骤1 :(服务器)获取所有应用程序数据

  步骤2 :(服务器)渲染HTML

  步骤3 :(客户端)加载HTML和应用程序逻辑

  步骤4 :(客户)补充一切

  除非目前的步骤已经完成,否则该应用程序在完成所有4个步骤后就无法进行交互。这意味着我们的应用程序至少具有4个瓶颈可以降低我们的初始加载速度。回答18提供了两个主要功能来帮助我们解决潜在的瓶颈。

  在获得所有数据之前,流式传输HTML

  如果将页面的某些部分包裹在悬念组件中,则不会等待此部分准备就绪。取而代之的是,在完成其他组件后,它将继续向前迈进。当该部分准备好数据时,React将其他HTML(和一个小脚本)流传输到客户端,并将内容完全呈现给应显示的位置。这样,您不必等待每个数据获得,因此您可以使用此功能来求解步骤1中可能出现的瓶颈(使用它,还必须实现您的数据采集库。与悬念集成的框中使用的服务器组件。)

  如果文件很大,则步骤3(应用程序逻辑的加载)可能比您想象的要长。要避免在此处进行瓶颈,您可以执行代码 - 分类和懒惰加载。这意味着该应用程序逻辑是根据多个部分加载的请求路径。出于各种原因,这很好,因为文件较小,并且您不会传输不必要的零件,因为用户可能无法访问应用程序提供的所有页面。

  在所有代码负载之前,

  在React 18中,通过将组件打包成中,您只需要告诉客户端不要阻止应用程序的其他部分等待组件加载。因此,即使缺少某些HTML,该应用程序也会开始水合。

  在所有组件消防栓之前与组件相互作用

  使用React 18的水合不会停止与已经消失液的组件相互作用。如果已加载了几个在组件中包裹的HTML,它将从组件树中的第一个开始,以启动水合作用。用户在另一个组件的水合过程中与其他组件进行交互(例如不耐烦地单击它),它将停止另一个组件的水合,并优先考虑用户尝试与之交互的水合。在组件水合后再次再次称为选择性水合。

  我们只想说我们有多欣赏React的持续发展。回答是每年都更好的工具。反应团队很棒,谢谢您所做的所有工作。您真的很不可思议。

  原始链接:https://yagmurcetintas.com/journal/whats-new-inew- react-18