lit-element Web Components 和 React 之间的主要区别[关闭]

2024-03-10

查看 React 代码,它似乎与“Lit-Element”代码更相似,两者都可以用于创建 Web 组件。如果有人能解释“React”和“Lit-element”之间的主要区别,那会很有帮助吗?


撰写时间:2020 年 10 月

构架CREATE HTML,
网络组件ARE HTML

React

(现在已经快十年了,由 Facebook/Meta 提供),主要特点是它virtualDOM。这意味着所有 DOM 元素都是在内存中创建的,React 负责将它们传递到(真实的)DOM。这也意味着您可以NOT do anyDOM 自行更新,或使用 W3C 标准事件系统。
中的一切 (real)DOM由 React 处理。
当您必须防止成千上万的开发人员在同一个 DOM 中乱搞时(例如 Facebook),这非常有用。 (没有慢速的 DOM,只有开发者编写访问 DOM 的慢速代码)

2022 年更新 反应R18 https://github.com/reactjs/rfcs/blob/react-18/text/0000-react-18.md仍然没有提到自定义元素/本机 Web 组件

W3C standard网络组件

(作者:苹果、Mozilla、谷歌、微软)

由 3 种不同的技术组成:

  • 自定义元素 API
  • 模板:<template>
  • 影子 DOM

每个都可以单独使用!

您可以将shadowDOM附加到常规上<div>无需使用自定义元素或模板即可创建 DIV。

W3C Web 组件标准是defacto由浏览器制造商 Apple、Google、Mozilla 和 Microsoft 开发。

所有的人都必须达成一致,这使得制定标准的进展缓慢;但once只要 JavaScript 在浏览器中运行,W3C 标准就会受到支持。

Web Components 历史(从 2010 年开始):

  • 必看: 视频:Web 组件:恰逢其时 https://www.youtube.com/watch?v=y-8Lmg5Gobw

  • 应该看到: 构建 Web 组件这一年的实践经验教训 - Google I/O 2016 https://www.youtube.com/watch?v=zfQoleQEa4w

  • summary: https://dev.to/this-is-learning/web-components-101-history-2p24 https://dev.to/this-is-learning/web-components-101-history-2p24

微软选择更换浏览器引擎并使 Edge(2020 年 1 月)在 Chromium 上运行,
Web 组件支持现在所有现代浏览器.

Chrome、Safari 和 FireFox 支持 Web 组件(版本 V1)2018年以来.
某些浏览器(部分)支持现已弃用的 V0 版本的时间更长。
因此,我们对 Web 组件有丰富的经验。

  • The 自定义元素 API is an API,不多不少,(但很强大)
    将它与框架进行比较就像将 Set 和 Map 与 Redux 或 Vuex 进行比较一样。

  • 模板很棒,但是许多开发人员复制/粘贴博客示例来创建<template>使用 javascript 代码而不是在 HTML 中定义它们

  • 影子 DOM (and <slot>s and :parts)值得拥有一个长章,
    许多开发人员不明白它是什么或如何使用它,
    但大多数人对此都有坚定的看法。

Lit

(由谷歌提供)。是否建有图书馆on topW3C Web 组件技术

called 文学元素 & Lit-HTML版本 2 之前。
BeforeLit,谷歌也有Polymer

!!!您不需要 Lit 来开发 Web 组件!

点燃是一个tool它将加快开发进程。
当你首先学习文学时,你正在学习一门tool不是 Web 组件技术

Lit is 句法糖(有点像 jQuery)

(就像早期的 jQuery 时代一样)有60 多种点燃替代品:

https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/ https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/

React 的未来?

有趣的部分是 React,因为它virtualDOM 实现,仅支持 W3C 自定义元素 API71% (see https://custom-elements-everywhere.com/ https://custom-elements-everywhere.com/).
You需要创建一个 React 包装器对于每一个您想要使用的 W3C 组件。
https://reactjs.org/docs/web-components.html https://reactjs.org/docs/web-components.html)

The React17更新 https://reactjs.org/blog/2020/10/20/react-v17.html(2020 年 10 月)甚至没有提到 Web 组件、自定义元素、shadowDOM 或模板等词

[2021 年更新] 我不再阅读 React 更新。但本尼·鲍尔斯做到了:

https://dev.to/bennypowers/what-s-not-new-in-react-18-45c7 https://dev.to/bennypowers/what-s-not-new-in-react-18-45c7

WHATWG

非常有趣的事实是 Facebook/Meta 没有浏览器,也不是 WHATWG 的核心成员。和2019年以来,WHATWG(即:Google、Apple、Microsoft、Mozilla)控制着浏览器中运行的内容:
https://techxplore.com/news/2019-06-w3c-whatwg-agreement-version-html.html https://techxplore.com/news/2019-06-w3c-whatwg-agreement-version-html.html

构架

All其他框架(Angular、Vue、Svelte 等)do100%支持W3C标准and can create网络组件

这创造了一个有趣的未来。

  • Facebook/Meta 并不开发浏览器,因此与浏览器运行的内容几乎没有利益关系。

  • WHATWG 是仅限受邀者;谷歌、苹果、微软和 MozillainviteFacebook?

  • 有人说 React 是新的 Flash(生命周期结束:2020 年 12 月 31 日 https://www.adobe.com/products/flashplayer/end-of-life.html)

  • 有人说 Facebook/Meta 将合并WWhatsapp、insT阿格拉姆和Facebook,
    然后会提供一个新的浏览器everyone在世界上must install

关于框架和库

免责声明:我自己制造了摩托车

框架和库就像您在超市购买的罐装和包装原料。

当然,你的餐桌上还有一顿饭。
但去买菜,taste香料,学习如何cut, bake and grill,
你将成为一名厨师。

库/框架的一个问题是:总会有重大变化在新版本中引入新功能时。或者当不再需要功能时,因为它们现在是本机的一部分,因此更快的标准(但语法不同)想想 jQuery 选择器和(稍后实现).querySelector

它绝不是一键式升级。而且因为您很可能没有为所有这些新功能编写 TDD 测试,你必须再次检查和测试你的所有代码

或者更糟,就像 Google Angular 1 到 Angular 2“升级”;你必须重写一切......

这是你的选择专业的你想成为的前端开发人员

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lit-element Web Components 和 React 之间的主要区别[关闭] 的相关文章

  • MUI v5:系统属性样式与 sx prop 之间是否存在性能差异?

    The 从 v4 迁移到 v5 https mui com guides migration v4 box指南指出 The Box系统 props 在 v5 中有一个可选的替代 API 使用sx支柱 你可以阅读本节 https mui co
  • React Native 中 fontAwesome 图标的圆形轮廓

    我想使用 fontAwesome 图标 使其位于圆圈的中间 我想将它用作一个图标项 我读到我们可以将它与圆形图标一起使用并将其放置在其中 但我无法使其工作 import IconFA from react native vector ico
  • 如何将类组件中的 props 发送到功能组件?

    我是 ReactJS 的初学者 需要知道如何将一个页面中的 props 值发送到另一个页面 道具位于第一页上我可以获取类组件值如何获取另一页中的值 提前致谢 墙色 jsx import React Component from react
  • 鼠标输入时反应显示按钮

    我有一个反应组件 它包含如下方法 mouseEnter console log this is mouse enter render var album list const albums this props if albums user
  • React-Redux:绑定按键操作以启动减速器序列的规范方法是什么?

    这是一个关于react redux的新手问题 我花了几个小时四处搜寻才发现 所以我发布了这个问题 然后为后代回答 也可能是代码审查 我正在使用 React Redux 创建一个游戏 我想使用 WASD 键在小地图上移动角色 这只是更大努力的
  • React Router 总是将我重定向到不同的 url

    我是 React 和 React Router 的新手 我正在使用 React Router v4 并遵循基于以前版本的教程 但我让它工作了 使用在 SO 上找到的一些东西和 React Router v4 文档上的一些东西 但有一件事困扰
  • 如何在React中处理多个路由器

    假设我们有一个网络应用程序 它通常有很多视图 例如索引页面 管理面板 帮助页面 联系人等 我在主index js 中使用react router dom 来处理它们 它工作得很好 但是现在我在开发管理面板时遇到了问题 它是 index js
  • 发生错误。", ExceptionMessage: "提供的 'HttpContent' 实例无效

    尝试将文件添加到 http 休息调用时出现此错误 responseJson 消息 发生错误 ExceptionMessage 提供了无效的 HttpContent 实例 它确实 正在使用 多部分 参数名称 内容 异常类型 System Ar
  • Recoil 中的动态原子键

    我正在尝试创建一个动态表单 其中表单输入字段是根据 API 返回的数据呈现的 由于atom需要有一个唯一的键 我尝试将它包装在一个函数中 但是每次我更新字段值或重新安装组件 尝试更改选项卡 时 我都会收到一条警告 我在这里做了一个小的运行示
  • 需要将mxGraph与react js集成

    是否有任何示例或示例项目解释如何将 mxGraph 与 React js 集成 import React Component from react import PropTypes from prop types import ReactD
  • 函数执行后重新调用react hook

    我是反应钩子的新手 我有一个钩子函数 它从 API 接收一系列数据并显示在列表中 function useJobs const jobs setJobs React useState const locations setLocations
  • 使用相同的 props 来反应备忘录重新渲染?

    有一个相当简单的功能组件 如果给出相同的道具 我想阻止它被重新渲染 下面是网上找的 貌似不行 知道我应该做什么吗 就我而言 props 由一组对象组成 其中一些也是嵌套对象 这也许是一个线索 export const DataTable R
  • 监听 redux 动作

    我想创建一个可重用的 redux 表模块 它将存储和更新页码 显示的总页数等 我可以在所有页面之间共享这些模块 但是 我需要更新操作来触发刷新数据操作 该操作将根据页面到达不同的端点 因此 可能类似于页面特定的监听 RefreshData
  • 发布到 npm 时出现问题

    所以我尝试使用 React 构建一个开源项目并将其推送到 npm 问题是 我的组件虽然在测试环境中运行良好 安装到其他组件 但当我将其发布到 npm 并下载包并尝试访问它时 它给了我一个错误 这是代码的一个小示例 import React
  • 在React组件中使用的字符串变量中插入html

    我正在为我的投资组合网站构建一个反应应用程序 目前我已经用 JSX 编写了应用程序 因此我可以添加以下内容 class Project extends React Component render return div h1 this pr
  • Facebook SDK 登录/注销 ngrok

    我正在尝试将我正在构建的网络应用程序与 Facebook 集成 Facebook 现在要求所有 API 调用都必须从 https 站点进行 我正在构建的这个应用程序只是为了好玩 所以我使用的是 localhost 我在用着ngrok将我的请
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 有什么方法可以复制 div 的渲染 HTML 吗?

    我正在开发电子邮件签名生成器 我想通过按按钮复制最终签名 而不是手动选择签名并将其复制到剪贴板 这意味着我需要它们的图像 文本和样式 我尝试了几种变体 包括 w3schools 的变体 但没有成功 其中一些只是复制文本 但没有样式 例子 h
  • 在这个反应示例中,bind 做了什么?

    什么是bind在这个声明中做this tick bind 这个 在下面的代码中 export class Counter extends React Component constructor props super props this
  • 在 React Web 应用程序中使用 createjs-soundjs

    我想用https www npmjs com package createjs soundjs https www npmjs com package createjs soundjs在 React Web 应用程序上播放声音 我正常安装了

随机推荐

  • alt 属性可以用于输入类型按钮吗

    我想询问输入标签中的 alt 属性 正如我在许多网站上发现的那样 当我们输入图像类型时 会使用 alt 属性 1 可以用于输入型按钮吗
  • 如何使用最新版本的 R RDCOMClient 从 Outlook 发送邮件?

    当我使用最新版本的 R RDCOMClient 包发送 Outlook 电子邮件时 它显示错误 相同的代码 library RDCOMClient init com api OutApp lt COMCreate Outlook Appli
  • 通过spring AOP + Aspectj进行异常处理

    在我的项目中 我有一个域层 它基本上是 POJO 和一个位于域层之上的 Spring 控制器 服务层 我还有一个位于服务和域之间的 AOP 层 我的域层正在抛出业务异常 这些异常现在正在服务层中处理 但是我想更改它 以便从领域层抛出的异常将
  • Backbone.js 视图的合适粒度是多少?

    我正在采用 Backbone js 来渲染一个小角落现有的大型网络应用程序 http www esvonline org 如果进展顺利 我可以看到 Backbone js 不断发展以涵盖整个应用程序 为有机增长的应用程序提供一些急需的结构
  • 了解Scheme函数

    我们的编程语言练习考试中给出了以下问题 我很难理解它是如何工作的 有人能告诉我代码流程是什么吗 我已经在球拍中运行过它并且知道答案是什么 看起来第一个 lambda 函数将其他两个函数作为参数 但输入在哪里 lambda x 2 and l
  • 在 C 中创建字符串的宏

    替代标题 以帮助搜索 将预处理器标记转换为字符串 我怎样才能从一个字符串C宏的价值 原始问题 我想用C define在编译时构建文字字符串 该字符串是因调试 发布等而更改的域 我想做这样的事情 ifdef TESTING define IV
  • 是否有 Perl 模块可以连接 Google Contacts API?

    我想编写一个命令行程序来将联系人添加到 GoogleMail WWW 联系方式 Google联系方式 http search cpan org dist WWW Contact GoogleContactsAPI似乎只能从 Google 获
  • 多核机器上 .NET 操作的非线性扩展

    我在 NET 应用程序中遇到了一种奇怪的行为 该应用程序对一组内存数据执行一些高度并行的处理 当在多核处理器 IntelCore2 Quad Q6600 2 4GHz 上运行时 它会在启动多个线程来处理数据时表现出非线性扩展 当在单核上作为
  • Wix升级:预选功能

    我们使用 Wix 来创建我们的安装程序 我们使用的用户界面可以选择需要安装的功能 某些功能默认启用 其他功能则禁用 但是 当我们运行升级时 这些默认值将被保留 我们希望安装程序记住安装了哪些功能 并在功能树中启用它们以进行升级 应禁用所有其
  • Railsinstaller 遇到问题

    我在 Windows 8 笔记本电脑上遇到了 Railsinstaller 问题 这是由于无法使用以下命令在 项目 目录中运行服务器rails s命令 但是与许多教程相反 我每次都会收到这个命令 C Sites demo gt rails
  • 商业产品中的 JavaFX [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用 JavaFX 作为大型商业产品的开发框架 我可以在不违反 Oracle 许可的情况下关闭未来产品的源代码并使用 Oracle JavaFX
  • 我想显示第一个列表中的第一个单词并显示第二个列表中的 10 个单词,依此类推-python。我尝试使用 range 和 zip。它仍然不起作用

    在这里 我正在创建一个名为 li 的列表 其中包含标签文本和名为 list2 的列表 其中包含 span 文本 我使用 zip 附加它 现在 我有一个名为 name 的第三个列表 它有 2 个值 最活跃者 增益者 我想要 Mostactiv
  • 在 dataclasses.field 中使用显式 __init__ 构造函数和 default_factory 参数时,数据类属性丢失

    以下代码创建一个数据类Obj带有 int 字段n默认值为 0 from dataclasses import dataclass field dataclass class Obj n int field default factory i
  • scala:匹配对象的类型参数

    例如 如果我有一个接受 Type 参数的类Seq T 我有很多此类的对象 我想根据类型参数拆分它们T 例如 val x List Seq Int 1 2 3 4 5 6 7 8 9 0 Seq String a b c x foreach
  • 错误:管道的另一端没有进程

    我正在使用 SQL Server 2012 仅限本地主机 和 SQL Server Management Studio SSMS 来查看包含二进制值 图片 的表图片 大小为 928 行 大小并不大 只有那张桌子有问题 即使在重新启动 SQL
  • 如何在DataGridViewTextBoxCell和DataGridViewComboBoxCell之间切换?

    我想要一个有两列的 DataGridView 第一列始终为 DataGridViewComboBoxColumn 类型 根据该列中的选择 我希望能够将第二列中的相应单元格更改为 DataGridViewComboBoxCell 或 Data
  • CQRS、DDD同步报告数据库

    我们正在尝试 CQRS 和 DDD 以及事件溯源 假设我有一位客户更新了电子邮件地址 这会触发 CustomerUpdatesEmailAddress 事件 这会进入我的操作 写入数据库 并更新表 我们的系统设计为有一个运行的 ETL 流程
  • 有没有办法在 F# 中通过字符串获取记录字段?

    我想通过用字符串查找来获取记录中字段的值 type Test example string let test example this is the value let getByName s string something like t
  • 使用 pd.concat 时添加标识原始数据框的列

    我有一个数据框字典 如下所示 test df1 pd DataFrame col1 3 5 1 4 col2 3 5 1 4 df2 pd DataFrame col1 3 5 1 4 col2 3 5 1 4 df3 pd DataFra
  • lit-element Web Components 和 React 之间的主要区别[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 查看 React 代码 它似乎与 Lit Element 代码更相似 两者都可以用于创建 Web 组件