nanxiaobei
V2EX  ›  React

⚛️ React 开发最佳实践

  •  
  •   nanxiaobei ·
    nanxiaobei · Jul 26, 2022 · 10247 views
    This topic created in 1397 days ago, the information mentioned may be changed or developed.

    非常基础非常初级非常幼稚的 React 开发看了想打人的 React 开发最佳实践,但我保证每个大公司都有这样的代码,所有的屎山项目都是这么累计起来的而且大家不以为意。

    1. 多层 props 传递,保持命名一致
      onChangeonChangeonChange
      onChangehandleChangechange

    2. 若对函数包装后传递,保持命名不一致
      onChangeonTextChange = () => { onChange() }onTextChange
      onChangeonChange = () => { props.onChange() }onChange

    3. 保持命名简洁
      onChange
      handleChange

    4. 保持命名明确
      onChange paginationTotal
      change pagiTotal

    5. 传递不同组件的 props ,保持前缀区分
      tableColumns tableLoading btnType btnText
      columns loading type text

    6. 将 props 按照一定的规则排序,例如 UI 中出现顺序、或变量类型、或重要程度等

    7. 保持文件与目录的命名,单复数符合常规
      common config components utils
      commons configs component util

    8. ''0 在 jsx 中一定要做判断
      val !== '' && 123 val !== 0 && 123
      val && 123

    9. 保持文件、文件夹大小写一致
      ShopList ShopDetail
      shop-list ShopDetail

    10. 保持文件夹命名与 url 对应
      /Shop/List.jsx/shop
      /BestShop/List.jsx/shop

    11. 保持文件夹层级与 url 一致
      /Shop/A.jsx/shop/a/Shop/B.jsx/shop/b
      /Shop/A.jsx/shop/a/Shop/Center/B.jsx/shop/b

    12. 理清文件、文件夹设置逻辑,尽量减少数目,思考是否有必要新增

    82 replies    2022-08-08 08:45:43 +08:00
    Mark24
        1
    Mark24  
       Jul 26, 2022
    不用 Hooks ✅
    Bijiabo
        2
    Bijiabo  
       Jul 26, 2022
    赞,有心
    Aloento
        3
    Aloento  
       Jul 26, 2022
    不用 Hooks ✅
    adjusted
        4
    adjusted  
       Jul 26, 2022   ❤️ 9
    ``` javascript
    onChange={handleChange}
    onTextChange={handleTextChange}
    ```
    beginor
        5
    beginor  
       Jul 26, 2022 via Android
    ShopList ShopDetail ❌
    shop-list ShopDetail ✅
    ylual
        6
    ylual  
       Jul 27, 2022 via iPhone   ❤️ 3
    @Aloento 用 Hooks 怎么了呢
    Bijiabo
        7
    Bijiabo  
       Jul 27, 2022   ❤️ 3
    延伸一下第 8 条,尽可能让判断条件意义明确:

    ```js
    if (val !== '' && val !== 0 && val === ‘xxx’) {...} ❌
    var isXXXScenario = val !== '' && val !== 0 && val === ‘aaaa’; if (isXXXScenario) {…} ✅

    ```
    JounQin
        8
    JounQin  
       Jul 27, 2022 via iPhone   ❤️ 1
    All in hooks.
    HFX3389
        9
    HFX3389  
       Jul 27, 2022
    @Mark24 #1
    @Aloento #3
    公司强制要求 Hooks+函数式开发
    iseki
        10
    iseki  
       Jul 27, 2022 via Android   ❤️ 16
    不用 class 组件 ✅
    Aloento
        11
    Aloento  
       Jul 27, 2022
    @ylual 我只是一个复读机
    Leviathann
        12
    Leviathann  
       Jul 27, 2022   ❤️ 3
    官方示例就是方法叫 handle ,参数叫 on
    huijiewei
        13
    huijiewei  
       Jul 27, 2022
    不用 class 组件 ✅
    bthulu
        14
    bthulu  
       Jul 27, 2022
    4. 保持命名明确, 你这一点都不 js. 多看看 nodejs 组件命名和第三方命名, 能用一个字符命名的, 绝对不要用两个字符. 能用缩写的绝对不要用全称.
    bthulu
        15
    bthulu  
       Jul 27, 2022
    8. '' 与 0 在 jsx 中一定要做判断. 你写着一坨又臭又长. js 是干嘛的? 是脚本语言, 是解释型语言, 不是编译型语言. 你写成裹脚布那样又臭又长, 你还用什么 js, 去用 C#, Java 不好么?
    oatw
        16
    oatw  
       Jul 27, 2022   ❤️ 1
    不用 React ✅
    linkopeneyes
        17
    linkopeneyes  
       Jul 27, 2022
    不用 Hooks ✅
    beisilu
        18
    beisilu  
       Jul 27, 2022
    不写前端✅
    AyaseEri
        19
    AyaseEri  
       Jul 27, 2022
    不搞开发✅
    anakinsky
        20
    anakinsky  
       Jul 27, 2022
    不活了✅
    sechi
        21
    sechi  
       Jul 27, 2022
    不用电脑✅
    Mark24
        22
    Mark24  
       Jul 27, 2022 via Android
    @HFX3389 说明对技术缺乏基本判断。hooks 太容易出问题 😂
    plk403
        23
    plk403  
       Jul 27, 2022
    不上 V2✅
    vivipure
        24
    vivipure  
       Jul 27, 2022
    all in hooks
    zed1018
        25
    zed1018  
       Jul 27, 2022
    不用 axios ✅
    Lyv5
        26
    Lyv5  
       Jul 27, 2022
    我们都是菜狗✅
    kangyan
        27
    kangyan  
       Jul 27, 2022
    月经贴了属于是
    ryougifujino
        28
    ryougifujino  
       Jul 27, 2022   ❤️ 1
    on 和 handle 命名本来就是都要用的啊。
    https://reactjs.org/docs/handling-events.html
    抄自官网:
    function Form() {
    function handleSubmit(e) {
    e.preventDefault();
    console.log('You clicked submit.');
    }

    return (
    <form onSubmit={handleSubmit}>
    <button type="submit">Submit</button>
    </form>
    );
    }
    mxT52CRuqR6o5
        29
    mxT52CRuqR6o5  
       Jul 27, 2022 via Android   ❤️ 6
    @Mark24
    https://stackoverflow.com/questions/38926574/react-functional-components-vs-classical-components
    官方态度也是 encourage ,你不想用当然可以不用,但请不要到处宣传谬论 ok ?
    ke2933
        30
    ke2933  
       Jul 27, 2022
    @Mark24
    @Aloento
    @sjhhjx0122
    公司要求用 Hooks ,个人贼讨厌
    jason94
        31
    jason94  
       Jul 27, 2022
    第 3 条就不对

    https://reactjs.org/docs/handling-events.html

    reactjs 官方示例就是用的 handle ,这样的好处是可以将事件处理函数和其他处理函数区分开。
    christin
        32
    christin  
       Jul 27, 2022   ❤️ 1
    不用 class 组件 ✅
    dont27
        33
    dont27  
       Jul 27, 2022
    不改需求✅
    churchill
        34
    churchill  
       Jul 27, 2022   ❤️ 1
    以我个人浅薄的 react 使用经验来说,hooks 是 react 用起来最舒服的特性之一
    我的焦点可以一直在数据上面,不用考虑什么 Mount, Update 各种东西,就好比手指不离开键盘主行
    不理解为什么这么多人不喜欢
    人与人的悲喜确实不尽相同
    guchengzhihuan
        35
    guchengzhihuan  
       Jul 27, 2022
    不用 React✅
    NTZONE
        36
    NTZONE  
       Jul 27, 2022   ❤️ 1
    最让我疑惑的句式之一就是最...之一,我认为「最」和「之一」是矛盾的。
    dreamerblue
        37
    dreamerblue  
       Jul 27, 2022
    不用 Hooks ✅
    不用 React ✅
    yuuko
        38
    yuuko  
       Jul 27, 2022
    换 Solidjs
    lmshl
        39
    lmshl  
       Jul 27, 2022
    All in hooks ✅
    kongkx
        40
    kongkx  
       Jul 27, 2022 via iPhone
    保持一致性就好了,注意命名规范,没那么多条条框框
    Oktfolio
        41
    Oktfolio  
       Jul 27, 2022   ❤️ 1
    换 Angular✅
    qiumaoyuan
        42
    qiumaoyuan  
       Jul 27, 2022
    其实你们所谓的“屎山”跟这些所谓的规范关系不大。屎的主要来源是重复代码,完。
    avv
        43
    avv  
       Jul 27, 2022
    竟然没人提 VUE✅
    duanxianze
        44
    duanxianze  
       Jul 27, 2022
    不做前端了✅
    lankunblue
        45
    lankunblue  
       Jul 27, 2022
    @bthulu 比如说?
    CodingNaux
        46
    CodingNaux  
       Jul 27, 2022
    比起这些,代码的可读性更重要吧
    linkopeneyes
        47
    linkopeneyes  
       Jul 27, 2022
    @churchill 不够直观,每个人你不知道他的水平,接手别人的代码,每个 hook 都要点进去从头到尾看一遍,hook 看似很美好,但是纯函数的组件我写起来就觉得奇怪,好像有洁癖一样的组件和 hook 要纯洁单一,但是写业务的时候没法纯洁单一,每次为了代码看起来整洁一点,抽了一堆 hook 出来,结果没整洁反而更奇怪了,不过也可能是我 angular 写习惯了
    TWorldIsNButThis
        48
    TWorldIsNButThis  
       Jul 27, 2022 via iPhone
    @sjhhjx0122 写成 service 不是也要看一遍?这个区别在哪
    linkopeneyes
        49
    linkopeneyes  
       Jul 27, 2022
    @TWorldIsNButThis 没什么区别,可能是写 class 更符合我的直觉
    v2pxpx
        50
    v2pxpx  
       Jul 27, 2022   ❤️ 1
    不用 React ✅
    v2pxpx
        51
    v2pxpx  
       Jul 27, 2022
    @qiumaoyuan 我认为的”屎“,是简洁。你可以通过一种更加简洁的代码实现相同的功能,不仅仅是代码量
    nzbin
        52
    nzbin  
       Jul 27, 2022
    《 Angular 代码风格指南》自取
    https://angular.cn/guide/styleguide
    mingdongshensen
        53
    mingdongshensen  
       Jul 27, 2022
    作为初学者,觉得 hook 挺不错的,第三方库的 hook 都设计的挺好用起来也方便,自定义 hook 写不太多,大家不想用 hook 可能是因为自定义 hook 设计难度?
    mingdongshensen
        54
    mingdongshensen  
       Jul 27, 2022
    不用 class ✅
    zxCoder
        55
    zxCoder  
       Jul 27, 2022
    不用 jsx✅
    fo0o7hU2tr6v6TCe
        56
    fo0o7hU2tr6v6TCe  
       Jul 27, 2022
    最近正在学习 react ,很好奇为啥不用 hooks.....
    bzw875
        57
    bzw875  
       Jul 27, 2022
    用不用 Hooks 听老板的,我都行
    linzhipeng
        58
    linzhipeng  
       Jul 27, 2022
    不用 react✅
    w6a
        59
    w6a  
       Jul 27, 2022
    用 JQuery ✅
    vampuke
        60
    vampuke  
       Jul 27, 2022
    想问问第 8 条
    vampuke
        61
    vampuke  
       Jul 27, 2022
    @vampuke
    '' 与 0 在 jsx 中一定要做判断
    val !== '' && 123 val !== 0 && 123 ✅
    val && 123 ❌


    必要性是什么
    xingguang
        62
    xingguang  
       Jul 27, 2022
    @NTZONE #36 one of the best xxx 英语的经典句式了
    ada87
        63
    ada87  
       Jul 27, 2022
    (严肃)我有一个真问题,在此处问求解惑:

    为什么看到所有地方都是 return (<div></div>) 这样的?
    直接 return <div></div> 不好吗,不好的话,具体是什么原因?
    MonkeyD1
        64
    MonkeyD1  
       Jul 27, 2022
    @ada87 你 div 里面代码够多的时候肯定要换行的, 总不能
    ```js
    return
    <div></div>
    ```
    这种情况会变成 return 的是 undefined
    g0thic
        65
    g0thic  
       Jul 27, 2022
    第一个就不同意了 事件用 handle 参数用 on
    bthulu
        66
    bthulu  
       Jul 27, 2022
    @lankunblue 比如说 nodejs 里的 fs, 为啥用 fs, 而不用 fileSystem 呢? 比如说 lodash, 为啥用_, 而不用全名 lodash 呢? 比如 jquery 为啥都用$不用 jQuery?
    js 作为脚本语言, 代码简短写起来快是第一位的, 任何其他考量都要为此让路.
    xingyuc
        67
    xingyuc  
       Jul 27, 2022
    大多数都是命名问题,如果你要求不了团队,那就忍着,这和 react 有什么关系
    gkinxin
        68
    gkinxin  
       Jul 27, 2022
    @vampuke #61 举个例子 如果是 0(xxx.length)&&<div>xxx</div> 括号里为常见出现 0 的情况,那这时候界面上就会显示 0 , 但通常我们希望是不显示,因此需要让第一个值的结果为 boolean 类型。
    vampuke
        69
    vampuke  
       Jul 27, 2022
    @gkinxin #68 请问那用!!xxx&&<div>xxx</div> 是不是更好
    KMpAn8Obw1QhPoEP
        70
    KMpAn8Obw1QhPoEP  
       Jul 27, 2022 via Android
    @qiumaoyuan 不应该是人菜吗
    datadump
        71
    datadump  
       Jul 27, 2022
    gkinxin
        72
    gkinxin  
       Jul 27, 2022
    @vampuke #69 取反可读性没么高
    zhwithsweet
        73
    zhwithsweet  
       Jul 27, 2022
    不打工了✅
    ldyisbest
        74
    ldyisbest  
       Jul 27, 2022
    React ✅
    Vue ❌
    uni
        75
    uni  
       Jul 27, 2022
    这些点提得都挺好的,很多我自己也没注意
    不过屎山主要还是代码结构的问题吧,跟命名关系没有这么大吧
    用 hooks 其实超容易出屎山的,其实我一直在期待 hooks 的最佳实践手册
    daokedao
        76
    daokedao  
       Jul 28, 2022   ❤️ 1
    checkbox 应该放在前面
    ✅ 不上 V2
    ❌ 不用电脑
    ccyu220
        77
    ccyu220  
       Jul 28, 2022
    这个 React 有个鸡儿的关系

    React 开发最佳实践 ❌
    JS 命名规范 ✅
    SHOOT
        78
    SHOOT  
       Jul 28, 2022
    这可是稳定就业的关键啊,弄得明明白白,清清楚楚,老板找个应届生两天就上手然后让我滚蛋咋办✅
    woqujjfly
        79
    woqujjfly  
       Jul 28, 2022
    ✅ 重新投胎投个好人家
    rodrick
        80
    rodrick  
       Jul 28, 2022
    这几个点都是能用于 react 但是不完全针对与 react 还有就是大家真的啥都能吵啊真的..
    charlie21
        81
    charlie21  
       Jul 29, 2022
    naming conventions 是 coding conventions 的重要组成部分
    ragnaroks
        82
    ragnaroks  
       Aug 8, 2022
    @ada87 应该是以前的习惯,现在更多是 return <div>abc</div> 或 return <><div>abc</div><span>efg</span</>
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2975 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 191ms · UTC 13:03 · PVG 21:03 · LAX 06:03 · JFK 09:03
    ♥ Do have faith in what you're doing.