​如何成为一个更好的 React 开发者?

作者 | Siradji Awoual

译者 | 苏本如,责编 | 屠敏

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

大家好!希望你们在疫情期间平平安安。

今天,我想在这里谈谈不同的内容。我想分享一些React的开发技巧和策略,以帮助你们在React中编写更干净、更好的代码。

大部分我已经分享的或者将要分享的内容,都是关于我在学习编码的过程中遇到的难题。

作为一个没有导师指导的自学型的开发人员,我发现有一件事很难做好,那就是在React中编写干净的代码。

我知道我必须变得更好,但是怎么做呢?

所以我想出了一个解决办法。我先找到5个深受大家尊敬的专业React开发人员,然后我去到他们的GitHub代码库中,从他们的React项目的代码中找到一些共同的东西或/和模式。

我并没有试图将我的代码与任何人的代码进行比较,我只是想知道这些被大家称为“专家”的开发人员到底在他们的代码中添加了什么,他们是如何实现某些功能的、他们采用了什么方法、以及为什么要采用这些方法。

正如预期的那样,我开始有了一些发现,我发现我的代码中缺少的东西,在所有这五个人的代码中都出现了。这些发现对我来说很有意义,因为它可以解释以前的一些做法了。比如说,为什么在需要prop-type时不将其添加到工作流中呢。

从那一天起,我开始把我学到的东西纳入到我的工作流程中。相信我,这有助于我理解React,并且让我的代码看上来不像新手写出来的。

闲话不再赘述。接下来我将分享一些我学到的技巧,这些技巧有些是从我的个人研究中得到的,也有些是通过项目和经验学到的。

注:下面技巧的重要性不以先后次序决定。

prop-type

如果你对React来说是新手,你可能不知道什么是prop-type。但是,如果你一直在使用React,那么你至少有几次机会见过或者使用过React。

什么是prop-type?

基本上,你可以把将prop-type视为一个模块、包、或者其他任何东西,它的作用是对父组件传递过来的值/参数(prop)作类型检查。

比如说,你希望从父组件中传来一个对象值,但是由于某种原因,你接收到的是一个数组,这会导致你的应用程序无法工作,不是吗?

下面是prop-type使用场景的一个例子。你定义了你期望的参数类型,如果你接收到了不同类型的参数/值,那么它就会抛出一个错误。

Const App = ({title, id, isCompleted}) => {
//
}App.propTypes = {
Id: PropTypes.number.isRequired,
title: PropTypes.string.isRequired,
isCompleted: PropTypes.bool.isRequired}

在上面的代码块中,我们先定义了一个名为App的组件,它接收三个参数(prop):title、isCompleted和id。接着我们定义了参数类型(prop-type),参数title应该是一个字符串,参数id应该是一个数字,而参数isCompleted应该是一个布尔值。

如果我们接收到的参数类型和我们定义的不一致,我们就会得到一个错误。这是prop-type的基本用例。它的用法可能会有点复杂,但随着时间的推移你会学会如何使用它。

如果你想了解更多关于prop-type的内容,可以参考这个prop-type文档的链接:https://github.com/facebook/prop-types。

在类上使用函数组件(functional component)和钩子(hook)

这个话题有点争议。有些人可能同意我的观点,而另一些人可能不同意。我已经使用过类和生命周期方法,如果我对这些有什么看法的话,那也应该是正面的。

然而,函数组件(functional component)和钩子(hook)是React的未来。React现在的一切变化都是为了更方便地使用hook(React的开发工具也支持这一变化)。

我个人认为,如果你开始一个新的项目,你应该使用钩子和函数组件,但是对于已有的使用类构建的代码库,建议不要进行重构。

我个人喜欢函数组件。我的意思是说,它们更干净,优雅而且更简单。将其添加到你的工作流中可以显著地让你的代码变得干净,并且使你成为更好的开发人员。

使用函数组件和钩子表明开发人员可以很好地适应生态系统。几个月前,我申请工作的公司给了我一个非现场编码测试。我用钩子完成了整个项目,面试官很高兴,因为如果我知道这意味着什么的话,那么说明我“可以顺应潮流”。

使你的组件小而且可重用,但不要过于抽象

React的主要特征之一是将所有内容都包含在一个组件中。React中的组件相当于乐高积木 - 构建应用程序的小代码块。

组件应该相对较小。举个例子,WhatsApp的send部分是一个组件,对吗?

在该组件内部,有send button组件、voice message组件和text area组件。

所有的功能都被分解成短小而简单的代码块。

组件不仅要小,而且要可重用。我并不是说所有的组件都应该是可重用的,但是如果你知道你会在你的应用程序的另一部分中再次使用一个组件,那么这个组件就应该是可重用的。可重用组件的一个很好的例子是button(按钮)组件。

如果我想创建一个按钮组件,我会让它尽可能地通用。按钮的大小、颜色、边框半径都将作为参数(prop)进行传递。

话虽如此,你也不应该过度抽象你的组件。而过度抽象会不必要地使得所有的组件或大部分组件都成为通用组件。

记住,只有在你确信一个组件会在多个地方使用,它才应该成为通用组件。

解构参数(Destructure prop),不要使用prop.{whatever}这样的代码了

这是我在研究过程中的发现之一。所以在我做这些研究之前,我的代码是这个样子的:

const myApp = (props) =>{///<h1>{props.title.heading}</h1>onChange={props.onChange}}

是的,我知道上面的代码很难看。不过,我已经想不起来上次这样写是什么时候的事了。现在我是这样写的。

如果参数(prop)只有一层深,我的代码是这个样子的:

const myApp = ({title, onChange}) =>{///Const {heading}= title<h1>{heading}</h1>onChange={onChange}}

如果它是嵌套的,例如redux state,我会这样写:

const myApp = ({chat:{messages}, settings:{themes}}) =>{///Const {sentMsg, recievedMsg}= messagesConst {dark, light}= themes<h1> Theme color {dark}</h1><li> {sentMsg} </li>}

显然,解构参数比用prop.title这样的写法,看上去更漂亮、更干净。

参数解构可以让你的React代码变得干净,使其可读性更强,并有助于再次清理。

以上是我想在这篇文章和大家分享的内容。希望你能喜欢,并从中学到一些有用的知识。

原文:https://dev.to/siradji/how-to-be-a-better-react-developer-3je9

本文为 CSDN 翻译,转载请注明来源出处。


推荐阅读

  • 一文带你认识keepalived,再带你通关LVS+Keepalived!

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

  • 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践

  • 5分钟!就能学会以太坊 JSON API 基础知识!

    真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前后端敏感数据加密方案及实现_02

文章目录1. 环境2. vue部分3. 控制层4. 工具类1. 环境 组件版本springboot2.4.0后端框架3.0.0前端框架vue-router4.0.0-0ant-design-vue2.0.0-rc.3vuex4.0.0-0 2. vue部分 <template><a-layout-header class"header"><div class"logo">…

蚂蚁金服 3 个项目进入 CNCF 云原生全景图 | 开源

2019 年 6 月 25 日&#xff0c;全球知名开源组织云原生计算基金会 CNCF 宣布&#xff0c;蚂蚁金服正式成为 CNCF 黄金会员&#xff0c;蚂蚁金服表示将持续加大对开源项目的支持&#xff0c;包括 Kubernetes&#xff0c;ServiceMesh&#xff0c;Serverless&#xff0c;安全容器…

Knative 初体验:CICD 极速入门

Knative 社区很早就在讨论用 Tekton 替换 Build 模块的事宜。Knative Build 官方已经正式说明不再建议使用 Knative Build 了。 如果你知道 Knative Build 是什么相信你理解起 Tekton 就是很容易的一件事了。 Knative Build 对自己的一句话概述是&#xff1a;A Kubernetes-na…

关于 Docker ,你必须了解的核心都在这里了!

来源 | fysuccess来源 | CSDN博客&#xff0c;责编 | Carol头图 | CSDN 下载自视觉中国Docker引擎Docker Engine是具有以下主要组件的客户端-服务器应用程序&#xff1a;服务器是一种长期运行的程序&#xff0c;称为守护程序进程&#xff08; dockerd命令&#xff09;。REST AP…

如何在视频里任意抠图?阿里工程师做到了!

阿里妹导读&#xff1a;现在的我们在手机上花费了越来越多的时间&#xff0c;其中&#xff0c;视频又格外地吸引我们的注意力。有很多好玩的视频&#xff0c;需要把前景物体从视频中分割出来&#xff0c;这需要花费创作者99%以上的时间。今天&#xff0c;阿里资深算法专家任海兵…

启动vue项目失败,报错Failed at the node-sass@4.14.1 postinstall script.

在启动vue项目的时候报错 报错信息如下&#xff1a;npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass4.14.1 postinstall: node scripts/build.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-sass4.14.1 postinstall script. npm ERR! This i…

DLedger —基于 raft 协议的 commitlog 存储库

尊敬的阿里云用户&#xff1a; 您好&#xff01;为方便您试用开源 RocketMQ 客户端访问阿里云MQ&#xff0c;我们申请了专门的优惠券&#xff0c;优惠券可以直接抵扣金额。请填写下您公司账号信息&#xff0c;点击上图&#xff0c;了解更多哦。 一、DLedger引入目的 在 Rocke…

不服来战!青藤发起“雷火引擎”公测赛 百万赏金寻顶尖白帽

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。可以说&#xff0c;没有任何一个时期比现在更能够彰显…

UI2CODE系列文章|如何批量制造高质量样本

在 UI2CODE 项目中&#xff0c;我们大量使用了深度学习方法来做一些物体检测。而深度学习模型的训练&#xff0c;避免不了需要大量的样本&#xff0c;因此如何制造大量样本&#xff0c;来满足模型训练需要是我们必须要解决的一个问题。在这篇文章中&#xff0c;我们将介绍我们如…

javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplicati

控制台service端打印javax.management.InstanceNotFoundException: org.springframework.boot:typeAdmin,nameSpringApplication 那个报的就点哪个,将红圈里的对勾去掉 就ok了&#xff01;

极测未来|淘宝千人千面内容下的智能评测技术与实践

背景挑战 全面个性化、内容化的淘宝&#xff0c;构造了基于内容的丰富的导购场景&#xff0c;包括猜你喜欢、有好货、每日好店、必买清单、哇哦视频、微淘、买家秀、头条、洋葱盒子….。个性化&#xff0c;给消费者带来更精准的货品分发。内容化为消费者带来更多惊喜和好的体验…

新时代 新营销 新增长, 纷享销客重磅发布CRM7.0产品,持续赋能企业数字化未来

2020年4月26日&#xff0c;主题为“新时代 新营销 新增长”的纷享销客2020销售增长大会暨春季战略与新品发布会&#xff0c;在GMIC大会期间成功举办。纷享销客创始人&CEO罗旭发表“新时代 新营销 新增长”的主题演讲&#xff0c;同时重磅发布纷享销客连接型CRM7.0新品。 这…

python3-matplotlib基本使用(以折线图为例)

1、什么是matplotlib Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一&#xff0c;支持跨平台运行&#xff0c;它是 Python 常用的 2D 绘图库&#xff0c;同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用&#xff0c;是数据分析中不可或…

flowable 开源项目

企业级工作流引擎开源项目 文章目录一、工作流引擎flowable1. flowable2. cims3. RuoYi-flowable4. springboot-flowable-modeler5. flowable-diagram二、工作流引擎activiti2.1. RuoYi-Vue-Process2.2. RuoYi-Process2.3. ruoyi-vue-activiti2.4. activiti7-workflow2.5. JeeS…

看!闲鱼在ServiceMesh的探索和实践

背景&#xff1a; 在阿里服务端开发以Java为主的大背景下&#xff0c;其他异构语言业务如何调用现有Java服务&#xff0c;如何与集团中间件打通&#xff0c;就成为使用非Java语言团队必须要解决的首要问题。 已有方案问题&#xff1a; 在ServiceMesh方案成熟之前&#xff0c…

编译错误 错误:PL/SQL: ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER 行

文章目录1. 现象2. 分析3. 解决方案通过存储过程将临时B表中的数据同步到轨迹表中 1. 现象 PROCEDURE LABS.ASSET_LOANP 编译错误错误&#xff1a;PL/SQL: ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER 行&#xff1a;17 文本&#xff1a;(select n.*, trunc(DBMS_R…

如何保证 HBase 服务的高可用?看看这份 HBase 可用性分析与高可用实践吧!

来源 | 阿丸笔记责编 | Carol头图 | CSDN 下载自视觉中国HBase作为一个分布式存储的数据库&#xff0c;它是如何保证可用性的呢&#xff1f;对于分布式系统的CAP问题&#xff0c;它是如何权衡的呢&#xff1f;最重要的是&#xff0c;我们在生产实践中&#xff0c;又应该如何保证…

python3-matplotlib绘制散点图、绘制条形图

matplotlib 支持的图形 https://matplotlib.org/stable/gallery/index.html 1、绘制散点图 from matplotlib import pyplot as plt from matplotlib import font_manager# y_3是三月每天的最高温度 y_10 是十月每天的最高温度 y_3 [11,17,16,11,12,11,12,6,6,7,8,9,12,…

ORA-01858: 在要求输入数字处找到非数字字符 13行

文章目录1. 现象2. 分析3. 解决方案ORA-01858: 在要求输入数字处找到非数字字符13行 1. 现象 insert /*append*/ into ASSET_LOAN(select * from ASSET_LOANB );commit;2. 分析 由于ASSET_LOANB表和ASSET_LOAN表字段顺序不一致导致的 具体分析&#xff1a;由于ASSET_LOANB表倒数…

牛!Python 全栈必备的 150 个实战案例,一次性获得!

Python 全栈将是你升职加薪的硬通货。我见过很多的 Python 讲解教程和书籍&#xff0c;它们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符…