在 react 中使用 signals 库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Akay47
V2EX    React

在 react 中使用 signals 库

  •  
  •   Akay47 3 天前 1538 次点击

    比较推崇 solidjs 和 preact 的 signals, 但这两个库的生态不行, 如果在 react 中使用 preact/signals-react 是否可行呢? 尝试了下基础使用是 ok 的, 只是不知道项目大一点会不会出现和其它库不兼容的问题

    https://www.npmjs.com/package/@preact/signals-react

    12 条回复    2025-10-23 20:03:38 +08:00
    songray
        1
    songray  
       3 天前
    意义不大。

    preact signals 是浅层响应式,也就是 const foo = useSignal([]),你必须要 foo.value = newVal 更新引用才会触发视图更新,而且这种情况会走 vdom diff ,和 react 没啥区别。

    官网说的性能好主要是针对单值场景。比如 const foo = useSignal('a'), <div>{foo}</div>, 这个情况下会绕过 vdom diff ,直接更新 dom ,性能会比较好。

    现在这个版本我更推荐直接开 react compiler 得了...
    linkopeneyes
        2
    linkopeneyes  
       3 天前
    我之前在项目里用过,跟其他库也没什么问题,毕竟 signal 里面用了 useSyncExternalStore 会通知 react 重新渲染,好处就是可以在脱离 react 之外的地方更新 signal ,react 也会被重新渲染
    deng565430
        3
    deng565430  
       3 天前
    用 zustand 不是更好吗
    shunia
        4
    shunia  
       3 天前
    那我感觉直接用 solid 或者 svelte ,不是更好吗?

    singals 没有在 react 里实现深度适配,用起来体验应该不如上面两个吧。
    DICK23
        5
    DICK23  
       3 天前
    不用 solid 的话用 usesignal 写的太繁琐了,确实不如直接用 zustand
    ZztGqk
        6
    ZztGqk  
       3 天前 via iPhone
    你可以混合开发,用 astro + nanostores ,对于一些重的场景用另外一个框架,另外如果真在意 react 性能的话,楼上的 zustand 和 Jotai 也是可以的,把副作用全部放在 setter 和 getter 里,避免重复计算。
    lumyx
        7
    lumyx  
       3 天前
    花里胡哨,没解决什么切实的痛点,dart 这边也抄了一个,但看着更像 炫技并没什么亮点。所谓的细粒度更新,对于 flutter Widget 没有任何效果,flutter 也不需要所谓细粒度更新。 而纯数据上的细粒度更新,干了十年客户端从没遇到有这方面的需求
    zthxxx
        8
    zthxxx  
       3 天前
    @songray #1 不能说意义不大,只能说毫无意义 [Doge]

    确实是因为 react 重渲染机制与 useSyncExternalStore 这类存储形态决定了,

    solidjs signals 的核心是「各层组件不用重渲染,消费 signals 的副作用直接触发最底层 UI 更新」

    react 里不管怎么写,用 zustand 还是 jotai 还是 preact signals 都绕不开「要改 UI 更新,必须让整个父组件重渲染」;
    这里说的父是指所有 <div>{foo}</div> 的父
    Akay47
        9
    Akay47  
    OP
       3 天前
    谢谢各位大佬的回复, 之所以用 signals 主要是这种开发方式心智负担较小, 开发体验也比较好, 性能倒是没怎么考虑
    molvqingtai
        11
    molvqingtai  
       3 天前
    和 react 的设计思想相悖
    zbinlin
        12
    zbinlin  
       2 天前
    我试着用它来封装一个持久化的库,使用起来还不错,没碰到什么问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2444 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:16 PVG 13:16 LAX 22:16 JFK 01:16
    Do have faith in what you're doing.
    ubao msn 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