Web Components 2023 年 10 月份了,现在怎么样了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChrisFreeMan
V2EX    Node.js

Web Components 2023 年 10 月份了,现在怎么样了

  •  
  •   ChrisFreeMan 2023-10-19 13:25:01 +08:00 5311 次点击
    这是一个创建于 722 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我刚用 React.js + Electron 开发完一款桌面应用,突然有点想换个思路,反正移动端也会用 Web 技术栈,干脆移动端来点不一样的,反正界面也要重新写。所以就想着试试之前一直略有耳闻,但是优势是原生的 Web Components 。

    我想请教一下关于性能上的速度和内存占用,以及工程上的开发复杂度,状态管理的复杂度。因为似乎热度一直不怎么样,也没找到高质量的文章和 YouTube 视频,所以来 v 站这种卧虎藏龙的地方来问问。

    提问有点水,见谅。

    29 条回复    2024-03-12 17:37:27 +08:00
    thinkershare
        1
    thinkershare  
       2023-10-19 14:00:47 +08:00   2
    没有深度使用过,不好评价。Web Components 技术上我感觉很好,有浏览器原生的支持,但用的人应该不多。
    我正在将自己的博客前端使用 Web Components 重构,剔除掉 Vue 和其它所有第三方库 JS 库,只用 TS+ES2022+WebAPIs ,看看会遇到那些坑。
    本质上感觉还是在反现在的前端过度过程化和不可控现状。
    Leviathann
        2
    Leviathann  
       2023-10-19 14:19:13 +08:00
    web component 现在是不是还只有经典的 class component + lifecycle api 而没有 function component + hooks/signal ?
    Leviathann
        3
    Leviathann  
       2023-10-19 14:22:01 +08:00
    搜了下,有个叫 Haunted 的库实现了 hooks for web component
    AV1
        4
    AV1  
       2023-10-19 14:53:29 +08:00 via Android   1
    单纯用 Web Components 还是挺痛苦的,市面上还没有很好的最佳实践。我看到不少 Web Components 的组件库还要借助 lit 的再做一层封装。
    htps://lit.dev/
    Pastsong
        5
    Pastsong  
       2023-10-19 14:55:29 +08:00 via Android   1
    Web component 更适合些给别人用的通用 UI 组件,不在乎用户使用的框架。不适合把整个 app 用 web component 写
    ChefIsAwesome
        6
    ChefIsAwesome  
       2023-10-19 15:00:40 +08:00   1
    跟其它原生 api 一样,web component 是 low level api 。我们平时做项目都是用的 mvc 框架,web component 也得配这么一套东西才行。现在的 css module ,预编译,已经解决一部分最初设计 web component 时想要解决的问题了,所以用处不多。做广告这种放在别人网站的东西还是很好的。
    zdhxiong
        7
    zdhxiong  
       2023-10-19 16:40:17 +08:00   6
    刚用 Web Components 写完一个完整的组件库: https://www.mdui.org/
    Web Components 性能非常棒,唯一的问题是生态较弱,导致开发体验较差,不如 Vue 、React 全家桶方便。
    比较好的做法是,对于需要多项目复用的组件用 Web Components 写,应用层用 Vue 、React 等写。
    himself65
        8
    himself65  
       2023-10-19 16:46:30 +08:00 via iPhone
    可以试试 lit 。
    个人感觉大部分库对于 shadow dom 的支持还是很差的,
    bgm004
        9
    bgm004  
       2023-10-19 16:50:34 +08:00
    svelte/solidjs 不比 Web Components 香多了。
    nomagick
        10
    nomagick  
       2023-10-19 16:55:15 +08:00
    写过 lit

    搜索引擎和其他应用渲染你的页面有点障碍
    写法是 OOP 的写法,大部分前端从业人员没掌握,而且很难补课,招不到,写不好

    SSR 有点问题,虽然 SSR 是一种不正确的价值观,是对前端进化的抵制
    seahorzhang
        11
    seahorzhang  
       2023-10-19 19:53:28 +08:00 vi iPhone   1
    非常有名的轮播 swiper 已经开发出可用的 web 组件,可以去看看。
    crysislinux
        12
    crysislinux  
       2023-10-19 20:22:03 +08:00
    Salesforce 那个 lwc 就是基于 web component 的,我之前写了小半年这个。感觉易用性跟三大框架差距很大。
    linkopeneyes
        13
    linkopeneyes  
       2023-10-19 20:27:37 +08:00
    我在各种小项目重用过,也就 https://github.com/hellof2e/quark-design
    https://github.com/vaadin/web-components
    https://shoelace.style 这三个能用
    hez2010
        14
    hez2010  
       2023-10-19 20:27:48 +08:00   1
    hez2010
        15
    hez2010  
       2023-10-19 20:29:42 +08:00   1
    @hez2010 链接被 v2 识别错了。这里重新贴一下:
    Lit: https://lit.dev
    MS 商店: https://apps.microsoft.com
    基于 Web components 的 Fluent Design UX 库: https://learn.microsoft.com/en-us/fluent-ui/web-components/components/overview
    putaozhenhaochi
        16
    putaozhenhaochi  
       2023-10-19 20:29:49 +08:00 via iPhone
    国内各大组件库没啥动静
    passerby233
        17
    passerby233  
       2023-10-19 22:14:07 +08:00
    https://omijs.github.io/home/zh/
    passerby233
        18
    passerby233  
       2023-10-19 22:15:51 +08:00
    https://github.com/Tencent/omi 小白表示第一次听说 Web Components
    ysc3839
        19
    ysc3839  
       2023-10-19 22:22:25 +08:00 via Android
    我不是专业前端开发,之前简单了解过 Web Components ,感觉主要好处是写组件库。传统的组件库/css (比如 Bootstrap) 都是要你按要求摆出一定的元素结构,其中元素还得正确设置 class 以及其他 attr 。用 Web Components 则可以在一个“元素”中封装复杂的结构。
    RedNax
        20
    RedNax  
       2023-10-20 01:19:03 +08:00
    我们公司的组件库用 Webcomponent ,由于项目都是 React/Angular ,所以会在 WebComponent 组件库上再包一层成为 React/Angular 组件库。

    体验就 WebComponnet 本身就已经难写难用了,用在 React/Angular 里同样难用,比纯 React/Angular 的组件库差多了。

    没有太大意义的技术。
    agdhole
        21
    agdhole  
       2023-10-20 01:24:13 +08:00
    angular material 现在正在接入的底层 material 库就是 mdc 的 https://github.com/material-components/material-web
    laev
        22
    laev  
       2023-10-20 09:26:37 +08:00
    对于开发小插件,个人还是比较喜欢 svelte ,就 Web Components 当前来讲,拿来做复杂业务感觉差点意思
    zhbhun
        23
    zhbhun  
       2023-10-20 10:06:28 +08:00
    有用 ionic 开发移动端的混合应用,ionic 组件都是 web component 实现的,支持 angular 、react 和 vue ,因为使用了 shadow dom ,很多内部样式无法定制,还原设计稿的时候很痛苦,如果不定制的话,还是可以的。
    pk111and222
        24
    pk111and222  
       2023-10-20 10:19:42 +08:00 via Android
    大厂 B 端。已上生产。
    chaxus
        25
    chaxus  
       2023-10-20 10:25:07 +08:00
    TunkShif
        26
    TunkShif  
       2023-10-20 22:44:40 +08:00   3
    Web Components 实际上是 Custom Elements, Shadow DOM 和 Templates and Slots 这几个 API 组成的一套技术,这几个都是比较 low level 的 API, 实际上开发的时候还是需要使用 Lit 或者 Stencil 这样的框架,另外像 Vue, Svelte 和 SolidJS 也都可以直接将组件导出成 Custom Element 。

    目前个人感觉 Shadow DOM 的坑还是挺多的,比如样式隔离的问题,外部的 CSS 无法作用于 Shadow DOM 内,要写出 Headless 的无样式组件比较困难,当前有 CSS ::part() 选择器的方案可以解决部分问题。还有 form 表单不会识别 Shadow DOM 内的 input 元素,似乎 ElementInternals 和 FormAssociated 这一 API 能解决。另外 Shadow DOM 的 SSR 方案可能也还得等到几家浏览器支持 Declarative Shadow DOM 了才能稳定。

    目前我个人感觉 Web Components 适用的场景主要下面两个:
    一是用来开发封装专门功能的复杂组件,可以很方便的集成到其它任何应用里使用,比如这个 Emoji Picker ( https://nolanlawson.github.io/emoji-picker-element/),还有这个 Giscus 的评论组件 ( https://github.com/giscus/giscus-component )。
    另外一个就是用来实现一套完整的 Design System 的组件库,比如像 Material Design ( https://material-web.dev/),微软的 Fluent UI ( https://developer.microsoft.com/en-us/fluentui#/),不过 Fluent 2 改用 React 了。这种情况下我觉得特别适用于像 Django 或者 Ruby on Rails 这样传统的搞后端模板渲染的 Web 框架使用,替代 Bootstrap 这类的方案。
    其余情况我还是建议 React, Vue 之类的吧。

    另外如果感兴趣推荐参考一下 Shoelace ( https://shoelace.style/),我感觉是目前最完善的 Web Components 组件库,文档里对主题、动画、本地化定制,还有前面提到的表单的问题都有给出解决方案。
    image72
        27
    image72  
       2023-11-21 17:20:56 +08:00
    @DOLLOR 最新的 chrome-devtools-frontend 使用了 lit
    chuck1in
        28
    chuck1in  
       2023-12-10 18:04:02 +08:00
    这个 web component 没有数据绑定这种概念的吧?手写原生 dom 大家真的可以接受吗?东西大了写起来恐怕不是那么容易哦?
    byp
        29
    byp  
       2024-03-12 17:37:27 +08:00
    @zdhxiong #7 很赞,遵循 Materail You 规范,目前还在积极维护
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1216 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 17:26 PVG 01:26 LAX 10:26 JFK 13:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86