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 之间的主要区别[关闭] 的相关文章

随机推荐

  • 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 组件