写过过 Angular 和 Vue 后,才发现 React router dom 真的不行. - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Smash
V2EX    程序员

写过过 Angular 和 Vue 后,才发现 React router dom 真的不行.

  •  
  •   Smash 2021 年 7 月 27 日 4562 次点击
    这是一个创建于 1639 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前没写过 React,今天我才知道 React router dom 不是官方维护的,结果是一个卖教程的维护的,怪不得打着 React training 的 title...

    是不是把一个 router 库写得简单易用,扩展性强大,且符合人类直觉的话,培训就卖不出去了?

    我上一个帖子问有什么好用的 react router dom 的路由守卫,结果并没有.

    我尝试了自己封装,在 react router dom 的基础上,

    但是写出来的代码我感觉就是一坨屎,任凭我怎么封装,我看着这些诡异的 api 都觉得恶心.

    后来我又了解到,react router dom 的作者认为,为了其灵活性,不能过度封装,问题是灵活易扩展和简单易用多功能可以做到不冲突...

    如果只是提供如此简单的路由功能,我感觉我不如自己解析 url,进行条件渲染...

    我觉得这不是灵活,这是完全就是简陋...直接把 history 这些玩意儿暴露给使用者,

    没有 interceptor 式的路由守卫,没有命名路由,嵌套路由的写法也很诡异,

    这到底是封装了个什么...

    没搞懂为什么这个 lib 在 github 上关注度这么高,

    不过还好,我终于找到一个符合我使用直觉的,且还在维护的 router 库了...

    universal-router

    第 1 条附言    2021 年 7 月 28 日
    最后还是用了一个朋友推荐的 reach-router 的方案.

    reach-router 开篇文档有一句话,很有意思:

    "Reach Router and it’s sibling project React Router are merging as React Router v6. In other words, Reach Router v2 and React Router v6 are the same. There is more information on the maintainers website."

    现在看来 React Router V6 是难产了,上一次的 commit 已经是好久以前了,而且现在还是 beta.
    22 条回复    2021-07-29 10:50:46 +08:00
    Smash
        1
    Smash  
    OP
       2021 年 7 月 27 日
    React+tsx 这两天带给我非常畅快的编码体验,唯一让我觉得吃了苍蝇一样恶心的就是使用了 react router dom.
    seki
        2
    seki  
       2021 年 7 月 27 日
    我先替楼下的说一句:react 就是不行,还是 jquery 最好用
    --------

    虽然我也承认 react-router 挺反人类的(最新的还没发布的 v6 会改善不少)
    但是你说的这些基本上只是需要在 react 里面需要换个写法能实现
    所谓的「直觉」应该只是习惯命令式的写法了
    Smash
        3
    Smash  
    OP
       2021 年 7 月 27 日
    @seki 也许是习惯问题吧,不过我个人觉得 next.js 的约定式路由也挺人性化和复合直觉的.
    BigJi
        4
    BigJi  
       2021 年 7 月 27 日
    @seki 哈哈。
    wuchangming89
        5
    wuchangming89  
       2021 年 7 月 27 日
    react-router 和 redux 都不喜欢。个人感觉给 react 减分
    golangLover
        6
    golangLover  
       2021 年 7 月 27 日 via Android
    @Smash 你只是喜欢 php,手动斜眼
    ruoxie
        7
    ruoxie  
       2021 年 7 月 27 日
    因为 react 里万物皆组件,至于你说的问题,可以看下 umijs 是怎么封装的
    Cbdy
        8
    Cbdy  
       2021 年 7 月 27 日 via Android
    路由其实没啥东西,自己监听 popstate 做一个简单的路由库也很简单
    ruanyu1
        9
    ruanyu1  
       2021 年 7 月 27 日 via iPhone   7
    说的真有点过分了,开源作者和维护者提供技术咨询,再正常不过了。

    而且在开喷之前先了解下别人为什么这样设计,不是只有你一种 use case 。react router 相较于之前版本最大改变是去中心化路由,可以看看这里的解释,里面介绍了为什么这样设计。https://reactrouter.com/web/guides/philosophy

    接触新东西都有一个从陌生到熟悉的过程,希望不要遇到问题就来发牢骚。
    yushiro
        10
    yushiro  
       2021 年 7 月 28 日 via iPhone
    就像刚接触 dva,对于 effect 之类的用法很不习惯,直到看到一篇文章,讲这种方案背后的思想,才明白别人这样设计是实践某种理论,只是用的人不懂而已。作为技术从业者,还是需要多学习。
    zxCoder
        11
    zxCoder  
       2021 年 7 月 28 日 via Android
    提到 react, 粉丝们总会有很多新名词,新设计,新概念
    danhua
        12
    danhua  
       2021 年 7 月 28 日
    @yushiro 文章可以推荐一下么,最近刚好在看 dva 。
    lqzhgood
        13
    lqzhgood  
       2021 年 7 月 28 日
    @yushiro 听起来文章不错 我也想看看 还能找到么?
    zenwong
        14
    zenwong  
       2021 年 7 月 28 日
    早已换成自己的 router,几行就实现基本功能,可以自己试试。
    yushiro
        15
    yushiro  
       2021 年 7 月 28 日 via iPhone
    @danhua
    @lqzhgood
    原来那篇文章还没找到,但这篇可以参考
    背后的数学原理是“代数效应”
    https://zhuanlan.zhihu.com/p/169805499
    myCupOfTea
        16
    myCupOfTea  
       2021 年 7 月 28 日
    react router dom 我也觉得不是很好用
    但是 nextjs 我也觉的不太行,封装过渡,内部业务要做一些复杂的自定义路由,react-router-dom 我还可以实现,但是 nextjs 的就算了吧
    Austaras
        17
    Austaras  
       2021 年 7 月 28 日   1
    别听楼上讲代数效应的瞎吹,都是扯淡的

    react-router 的问题不是在于维护者跑路了吗? beta 都 beta 一年了还一大堆 bug,准备什么时候 release 啊?
    kssss
        18
    kssss  
       2021 年 7 月 28 日
    试试 umijs
    Smash
        19
    Smash  
    OP
       2021 年 7 月 28 日
    @kssss umijs 可以,可惜开工没有回头箭...迁移陈本太高,不想重新把项目从 vite 构建迁移到 umi 了,最后还是用了一个朋友推荐的 reach-router 的方案.

    reach-router 开篇文档有一句话,很有意思:

    "Reach Router and it’s sibling project React Router are merging as React Router v6. In other words, Reach Router v2 and React Router v6 are the same. There is more information on the maintainers website."

    现在看来 React Router V6 是难产了,上一次的 commit 已经是好久以前了,而且现在还是 beta.
    mxT52CRuqR6o5
        20
    mxT52CRuqR6o5  
       2021 年 7 月 29 日 via Android
    你这么一说我也觉得某些角度用起来体验没另两家好,我是没明白 useRouteMatch 返回的 path 和 url 到底有什么区别
    IvanLi127
        21
    IvanLi127  
       2021 年 7 月 29 日
    确实不怎么好用的样子。。。不知道是不是 Angualr 和 Vue 写惯了,思维没转变过来
    yazoox
        22
    yazoox  
       2021 年 7 月 29 日
    @yushiro 文章能分享一下么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3317 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:29 PVG 19:29 LAX 03:29 JFK 06:29
    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