前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[译] 更可靠的 React 组件:清楚易懂的可表达性

[译] 更可靠的 React 组件:清楚易懂的可表达性

作者头像
江米小枣
发布于 2020-06-15 14:12:47
发布于 2020-06-15 14:12:47
53500
代码可运行
举报
文章被收录于专栏:云前端云前端
运行总次数:0
代码可运行

原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/

对于一个 意义明确(meaningful) 的组件,是易于理解其行为的。

不要低估代码可读性的重要。你有多少次曾纠结于混乱的代码中,每个字都看懂了,但就是猜不出什么意思呢?

相比于真正写代码,开发者们花费了大把的时间去阅读和理解代码。编码活动中的 75% 的时间都在理解代码,20% 的时间用来修改既有的代码,仅仅只有 5% 的时间是在写新的代码。

把少量的额外时间花费在可读性上,将减少以后同事和自己的理解时间。在应用规模增长时,命名变得重要,因为代码量越大,理解起来也越难。

阅读意义明确的代码很容易。然而要书写有意义的代码,就要保证代码的整洁,并且持续努力让自己更条理清楚。

组件命名

Pascal 拼写法

组件名称就是把一个或多个单词(大部分是名词)用 Pascal 拼写法 (也称驼峰拼写法 Camel case)串联起来。比如 <DatePicker><GridItem><Application><Header>

特殊化

组件越特殊,其名称中包含的单词可能就越多。

一个叫做 <HeaderMenu> 的组件表示一个头部的菜单;而叫做 <SidebarMenuItem> 的组件表示边栏中的一个菜单项。

当名称蕴含的意图清楚易懂时,组件就容易理解了。为此,时常要使用冗长的名字。这是很好的:冗长总比不清楚好。

假如你从一堆项目文件中分辨出两个组件:<Authors><AuthorsList>。仅从名称来看,你能推测出两者的区别吗?够呛。

为了弄清楚,就不得不打开并浏览 <Authors> 的源码。这样做之后,你意识到 <Authors>服务器请求得到一个作者列表并渲染了 <AuthorsList> 这个表现组件。

<Authors> 取一个更特殊化的名字就能避免此情此景,比如 <FetchAuthors><AuthorsContainer><AuthorsPage> 就都更好。

清楚优于简洁

一词一意

一个词表达一个概念。比如,用 list 这个词表示一个渲染过的项目的集合。

为每个概念挑选一个词,并在整个应用中始终保持这种叙述。最终将形成一个由曾经使用过的 词语->概念 组成的可预测意图映射。

当使用不同的词语去描述同一个概念的时候,可读性问题就会显现。举例来说,你将一个负责渲染订单列表的组件定义为 <OrdersList>,又将另一个费用列表组件命名为 <ExpensesTable>

都表示渲染过的项目集合,但这个同样的概念被表达为了两个截然不同的单词:list 和 table。并没有理由这样做,这增加了命名的混乱,也破坏了一致性。

使用 list 这个词,将以上组件叫做 <OrdersList><ExpensesList>;或是用 table 这个词,称其为 <OrdersTable><ExpensesTable> -- 根据你的喜好来,只要保持一致性就好。

注释

意义明确的组件名称、方法名及变量名,已经足以让代码可读。在这种情况下,注释就已经多余了。

案例学习:编写自解释型的代码

常见滥用注释情况就是,对没有意义而含糊的命名进行解释。看看下面的案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// <Games> 渲染了一个 games 的列表
// "data" prop 包含一个 game 数据的列表
function Games({ data }) {  
  // 显示前 10 个游戏
  const data1 = data.slice(0, 10);
  // 把 data1 映射到 <Game> 组件
  // "list" 有一个 <Game> 组件的列表
  const list = data1.map(function(v) {
    // "v" 表示一个 game 数据
    return <Game key={v.id} name={v.name} />;
  });
  return <ul>{list}</ul>;
}

<Games  
   data=[{ id: 1, name: 'Mario' }, { id: 2, name: 'Doom' }] 
/>

例子中的注释用来解释一堆混乱的代码。<Games>datadata1v、魔法数字 10都是没有意义而难以理解的。

如果把组件重构,让其拥有意义明确的 props 和变量,则注释就可以轻易的省去了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const GAMES_LIMIT = 10;

function GamesList({ items }) {  
  const itemsSlice = items.slice(0, GAMES_LIMIT);
  const games = itemsSlice.map(function(gameItem) {
    return <Game key={gameItem.id} name={gameItem.name} />;
  });
  return <ul>{games}</ul>;
}

<GamesList  
  items=[{ id: 1, name: 'Mario' }, { id: 2, name: 'Doom' }]
/>

不要用注释去手动的解释,而要编写自解释型(self-explanatory)和自文档化(self-documenting)的代码。

可表达性阶梯

我把组件的可表达性分为了 4 种层次。所处的层次越低,则理解组件需要付出的努力就越多。

可以从以下方面理解组件的用途:

  1. 阅读命名和 props
  2. 求助于文档
  3. 浏览代码
  4. 询问作者

如果命名和 props 提供了组件之于应用的足够信息,那就是一种强表达性。要努力保持这种高水准。

有些组件具有复杂的逻辑,甚至良好的命名也无法表达出必要的细节。此时求助于文档就是个好习惯了。

当文档也有所缺失或是无法回答所有问题是,就不得不浏览一下代码了。虽说因为增加了额外的时间成本而算不上最好的选项,但这也是可以接受的。

而通读了代码后仍看不懂组件的话,下一步就要像组件的作者询问其细节了。这一步肯定是要尽量避免的。更好的做法是请求作者重构其代码,或是你自己(译注:确定弄清楚后)动手重构。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
代码质量第 3 层 - 可读的代码
可读的代码能极大的提高开发效率。在开发的过程中,有很大一部分时间是在阅读代码。可读的代码,容易理解,也容易改。反之,不可读性的代码,读起来心情很差,改起来也容易出错。
前端GoGoGo
2021/12/02
5520
代码质量第 3 层 - 可读的代码
可读的代码能极大的提高开发效率。在开发的过程中,有很大一部分时间是在阅读代码。可读的代码,容易理解,也容易改。反之,不可读性的代码,读起来心情很差,改起来也容易出错。
社区小番茄
2022/01/12
9946
代码质量第 3 层 - 可读的代码
[译] 更可靠的 React 组件:单一职责原则
原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/#6testableandtested
江米小枣
2020/06/15
1.2K0
[译] 更可靠的 React 组件:提纯
原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/
江米小枣
2020/06/15
1.1K0
照方抓药 - 重构 React 组件的实用清单
本文尝试将相关的概念做一个总结,列出一张可用、实用的方法论清单,让我们每次新建组件、修改组件时有章可循,真诚是让一切变好的基础,但实用的套路也是必不可少的。
江米小枣
2020/06/15
1.5K0
[译] 更可靠的 React 组件:合理的封装
原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/
江米小枣
2020/06/15
1.2K0
用 SOLID 原则保驾 React 组件开发
本世纪初,美国计算机专家和作者 Robert Cecil Martin 针对 OOP 编程,提出了可以很好配合的五个独立模式;后由重构等领域的专家 Michael Feathers 根据其首字母组合成 SOLID 模式,并逐渐广为人知,直至成为了公认的 OOP 开发的基础准则。
江米小枣
2020/06/16
8310
AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX
AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX
landv
2019/12/10
1K0
[译] 深入 React 高阶组件
原文: https://medium.com/@franleplant/react-higher-order-components-in-depth-cf9032ee6c3e
江米小枣
2020/06/16
8900
[译] 更可靠的 React 组件:从"可测试的"到"测试通过的"
原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/#6testableandtested
江米小枣
2020/06/15
1K0
代码质量与技术债系列分享之一—如何做好CodeReview
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
京东技术
2024/04/11
2340
代码质量与技术债系列分享之一—如何做好CodeReview
React组件设计实践总结02 - 组件的组织
一个复杂的应用都是由简单的应用发展而来的, 随着越来越多的功能加入项目, 代码就会变得越来越难以控制. 本文章主要探讨在大型项目中如何对组件进行组织, 让项目具备可维护性.
_sx_
2019/08/07
2K0
React组件设计实践总结02 - 组件的组织
React技巧7(TodoList实现3组件之间传递数据之优化)
本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React 技巧1(状态组件与无状态组件的使用) ----2018.01.04 2.React 技巧2(避免无意义的父节点)----2018.01.05 3.React 技巧3(如何优雅的渲染一个List)----2018.01.06 4.React 技巧4(如何处理List里面的Item)----2018.01.07 5.React 技巧5(TodoList实现)----2018.01.08 6.Re
前端人人
2018/04/11
8120
React技巧7(TodoList实现3组件之间传递数据之优化)
如何写出漂亮的 React 组件
在Walmart Labs的产品开发中,我们进行了大量的Code Review工作,这也保证了我有机会从很多优秀的工程师的代码中学习他们的代码风格与样式。在这篇博文里我会分享出我最欣赏的五种组件模式与代码片。不过我首先还是要谈谈为什么我们需要执着于提高代码的阅读体验。就好像你有很多种方式去装扮一只猫,如果你把你的爱猫装扮成了如下这样子:
哲洛不闹
2018/09/14
9130
如何写出漂亮的 React 组件
react组件深度解读
React 组件也一样, 它的输入是 props,输出是关于 UI 的描述。我们可以在多个 UI 中重用单个组件,组件也可以包含其他组件。React 组件的本质上就是一个普通的 JavaScript 函数。
xiaofeng123aa
2022/09/26
5.9K0
React-Native开发规范文档
方式表达逻辑,【强制】请勿超过3层, 超过请使用状态设计模式。 正例:逻辑上超过 3 层的 if-else 代码可以使用卫语句,或者状态模式来实现。
conanma
2021/11/02
2.1K0
React 概要
React 简介 React 是一个开源的javascript库,用来构建用户接口(UI)。下图是React的一些基本信息: React 的特点 单向数据流 数据自上而下 Prop
宅蓝三木
2018/02/07
1.3K0
React 概要
Vue.js 组件编码规范
本规范提供了一种统一的编码规范来编写 Vue.js 代码。这使得代码具有如下的特性:
图难于其易
2020/04/07
6.5K0
Vue.js 组件编码规范
如何优雅的设计 React 组件
作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React、Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式。那么,为什么
iKcamp
2018/01/04
5.4K0
[译] 更可靠的 React 组件:组合及可重用性
原文摘自:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/
江米小枣
2020/06/15
2.9K2
相关推荐
代码质量第 3 层 - 可读的代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验