众所周知,React是一个用于构建出色用户界面的JavaScript库。然而,并不是每个人都使用相同的工具或了解所有有助于使React开发体验更有趣和主动的有用工具。如果你还没有用过React,或者你有对它感兴趣的朋友,当他们问你为什么选择这个库时,你应该怎么回答?除了告诉他们这个库有多棒(这应该是第一个要说的),我还想提一下,开源社区创建的这些工具有助于将开发体验提升到一个全新的、令人兴奋的水平。以下是22种可用于在2019年构建React应用程序的工具(列表不按重要性排序)。1.webpack-bundle-analyzer你有没有想过你的应用程序的哪些包或哪些部分占用了所有空间?好的,我们可以使用webpack-bundle-analyzer查看一下,它将帮助我们识别占用最多空间的输出文件。它将创建一个实时服务器并为我们提供捆绑包内容的交互式可视化树状图。在这个工具包的帮助下,我们可以看到显示的文件在哪里、压缩后的大小、解析后的大小以及它们属于哪个父子。有什么好处?我们可以根据我们看到的插图来优化我们的React应用程序!这是它的截图:我们可以清楚地看到pdf包在应用程序中占用了最多的空间。它还占据了最大的屏幕,这对我们所有人都有用。但是,屏幕截图质量很小。我们还可以输入有用的选项以查看更多详细信息,例如generateStatsFile:true,并可选择生成一个静态HTML文件以保存在开发环境之外的某个地方供以后使用。2.React-ProtoReact-Proto是一款面向开发人员和设计人员的原型制作工具。这是一个桌面软件,所以在使用之前,我们需要下载并安装该软件。这是工具页面样式:该应用程序允许我们声明属性及其类型、在树视图中查看组件、导入背景图像、将其定义为有状态或无状态、定义其父组件、放大/缩小以及导出原型到一个新的或现有的项目。该应用程序似乎更适合Mac用户,但它也支持Windows。完成UI映射后,我们可以选择导出到现有项目或新项目。如果您选择导出到现有项目并选择根目录,它们将导出到./src/components,如下所示:下面是一个示例,我们使用示例中的组件之一:React-ProtoGot2,000onGitHub星星。但是,我认为应用程序仍然需要更新,还有很多工作要做,尤其是ReactHooks的发布。除非我们有可见的背景图像,否则我们无法缩小。也就是说,如果导入背景图片,缩小,再删除图片,则图片无法放大,因为操作按钮已经变灰,无法使用。放大的唯一方法是重新导入背景图像,放大后背景图像被删除。这个缺陷改变了我对这个工具的看法,但由于我在其他地方看不到这个开源文件,所以我将它添加到列表中。当然,成为开源软件对这个应用程序来说是一件好事,因为它有可能成为未来开源存储库的流行列表。3.WhyDidYouRenderWhyDidYouRendermonkeypatchReact告诉我们可以避免重新渲染。这不仅非常有用,还可以指导我们对项目进行性能修复,并帮助我们了解React的工作原理。此外,当我们更好地理解React的工作原理时,它也使我们成为更好的React开发人员。MonkeyPatch:这个名字起源于Zope框架。在纠正Zope错误时,人们通常会在程序末尾添加一个更新部分。这些被称为“游击补丁”。后来guerilla逐渐写成gorllia(猩猩),后来又写成monkey(猴子),猴子补丁的名字就这么莫名其妙的来了。我们可以通过声明一个额外的静态属性whyDidYouRender并将其值设置为true来将监听器附加到任何自定义组件:importReactfrom'react'importButtonfrom'@material-ui/core/Button'constChild=(props)=>
constChild2=({children,...props})=>(
{children}
)Child2.whyDidYouRender=trueconstApp=()=>{const[state,setState]=React.useState({})return(
{JSON.stringify(state,null,2)}setState({hello:'hi'})}>提交
Child#2 )}exportdefaultApp只有这样做之后我们的控制台弹出一个令人难以置信的烦人警报:但不要误会我的意思,请把它当作一件好事。使用这些烦人的消息,我们可以修复那些浪费的重新渲染。4.创建ReactApp每个人都知道创建ReactApp是开始开发React项目的最快方式(具有开箱即用的现代功能)。还有什么比npxcreate-react-app
更简单的呢?我在Medium(和Dev.to)上的教程使用create-react-app来构建React界面,因为它既快速又简单。我们中有些人可能不知道如何使用CRA创建TypeScript项目。我们所要做的就是在最后添加--typescript:npxcreate-react-app--typescript这样就省去了我们手动添加TypeScript到CRA项目中的麻烦。5.React-Lifecycle-VisualizerReact-Lifecycle-Visualizer是一个npm包,用于跟踪和可视化任何React组件的生命周期方法。与WhyDidYouRender类似,我们可以选择任何组件来启动生命周期可视化工具:}componentDidMount(){this.props.onMount()}render(){returnTracedComponent
}}constEnhancedTracedComponent=traceLifecycle(TracedComponent)constApp=()=>(<日志/>)结果,如下图:但是缺点之一是目前只适用于class组件,所以还不支持Hook。6.GuppyGuppy是一个友好且免费的React应用程序管理器和任务运行器。可桌面运行,支持跨平台,您可以放心使用。它提供了大量友好的图形界面,为React开发人员的一些典型任务提供支持。例如创建新项目、执行任务和管理依赖项。2018年8月添加了对Windows的支持,因此请放心,它绝对是跨平台的。下面是使用Guppy时的样子:7.react-testing-library我一直很喜欢react-testing-library,因为写单元测试的时候感觉很好。这个包提供了一个实用的DOM测试器,鼓励良好的测试实践。该解决方案旨在解决测试实现细节的问题,就好像它们对用户可见一样,而不是测试React组件的输入/输出。测试实施细节并不是确保您的应用按预期工作的有效方法。当然,我们可以更清楚地了解如何获取组件所需的数据,使用哪种排序方式等等。但是,如果我们必须更改实现以指向另一个数据库,则单元测试将失败,因为这些是耦合逻辑的实现细节。这是react-testing-library解决的问题,因为理想情况下我们只是希望我们的UI最终能够正常工作并正确显示。只要它们提供预期的输出,数据如何到达这些组件并不重要。以下是使用此库进行测试的示例代码://Hoisthelperfunctions(butnotvars)toreusebetweentestcasesconstrenderComponent=({count})=>render(,)it('rendersinitialcount',async()=>{//Rendernewinstanceineverytesttopreventleakingstateconst{getByText}=renderComponent({count:5})awaitwaitForElement(()=>getByText(/clicked5times/i))})it('incrementscount',async()=>{//Rendernewinstanceineverytesttopreventleakingstateconst{getByText}=renderComponent({count:5})fireEvent.click(getByText('+1'))awaitwaitForElement(()=>getByText(/clicked6times/i))})8.React开发者工具ReactDeveloperTools是一个扩展,允许在Chrome和Firefox开发者工具中查看React组件层次结构。这是React开发中最常见的扩展,也是React开发人员用来调试其应用程序的最有用的工具之一。9.Bit在使用像material-ui或semantic-ui-react这样的组件库时,Bit是一个很好的选择。它使我们能够探索数以千计的开源组件并使用它们来构建项目。有大量不同的React组件可供任何人使用,包括选项卡、按钮、图表、表格、导航栏、下拉菜单、加载微调器、日期选择器、面包屑导航、图标、布局等等。这些是由像你和我这样的其他React开发人员上传的。但是,也有一些实用程序可用,例如格式化日期之间的距离。10.Storybook如果你还不知道Storybook,又想能够轻松构建UI组件,我强烈建议你立即使用它。该工具启动了一个支持热重载的实时开发服务器,我们可以在其中独立并实时开发React组件。另一件好事是我们可以使用现有的开源插件将我们的开发体验提升到一个全新的水平。例如,使用StorybookREADME包,我们可以在开发用于生产的React组件时在同一页面上创建一个README文档。这足以作为一个常规的文档页面:11.ReactSight你们有没有想过你的应用程序在流程图中会是什么样子?React-sight可以让整个应用以树状图的形式展示层次结构,清晰的查看我们的React应用。它还支持ReactRouter、Redux和ReactFiber。使用此工具,我们可以将鼠标悬停在节点上,这些节点是树中与它们直接相关的组件的链接。如果查看结果有问题,可以在地址栏输入chrome:extensions,找到ReactSight框,点击AllowaccesstofileURLs开关,如下图:12.React-cosmosReact-cosmos用于创建一个用于重用React组件的开发人员工具。它会扫描您的项目中的组件并可以执行以下操作:使用props、上下文和状态的任意组合渲染组件模拟每个外部依赖项(例如API响应、localStorage等)当与正在运行的实例交互时,查看实时应用程序状态的变化13.CodeSandbox这是本次推荐中最好的可用工具之一,它使我们手动使用React的速度比眨眼还快(好吧,也许没那么快)。这个名为CodeSandbox的工具是一个在线编辑器,我们从创建原型到部署Web应用程序-全部来自这个站点!早期Codesandbox只支持React,现在已经扩展到Vue、Angular等库。它们还支持常见的静态站点生成器,如gatsby或nextjs,以创建项目来启动你的下一个Reactweb项目。不仅活跃,关于codesandbox还有很多有趣的事情可以讨论。如果您需要探索人们为方便起见而构建的一些项目,单击探索可让您轻松访问大量代码示例,以帮助您更新下一个项目:一旦您开始编辑项目,您将意识到,在事实上,你想要使用的是一个强大的VSCode编辑器。我很想写一篇关于我们今天在codesandbox上可用的所有功能的完整文章,但是,看起来这项工作现在已经完成了。14.ReactbitsReactbits是React模式、技术、提示和技巧的集合,全部以类似在线文档的格式编写,您可以在其中快速访问不同的设计模式和技术、反模式、样式、UX变体和其他有用的反应相关材料。他们有一个GitHub存储库,目前有10437颗星。一些示例包括道具代理、处理不同场景中的各种UX组合等概念,甚至暗示每个开发人员都应避免的一些陷阱。在他们的页面上是这样的,你可以在左边的菜单中看到,有很多信息:)15.FolderizeFolderize是一个VSCode扩展。它允许我们将组件文件转换为组件文件夹结构。一个转换后的React组件仍然是一个组件,它只是现在被转换为一个目录。例如,假设我们正在创建一个React组件,它将文件作为props来显示有用的信息,例如它们的元数据。元数据组件的逻辑占了很多行,所以我们决定把它拆分成一个单独的文件。然而,当我们决定这样做时,我们有两个相互关联的文件。因此,如果我们的目录看起来像这样:我们可能希望将FileView.js和FileMetadata.js抽象到像Apples那样的目录结构中,特别是如果我们想添加更多与文件相关的组件,如FileScanner.js。这就是folderize可以为我们做的,所以他们可以有这样的结构:importReactfrom'react'importFileViewfrom'./src/components/FileView'constApp=(props)=>exportdefaultApp16。ReactStarterProjectsReactStarterProjects是一个很棒的依赖列表,我们可以在一个页面中查看所有项目。因此,如果我们发现能够一次快速查看大量选项很有用,那么这个就适合我们。一旦我们看到一个我们喜欢的启动项目,我们可以简单地克隆存储库并根据正在开发的应用程序的需要进行简单的修改。但是,并非所有库都用于克隆存储库,因为其中一些库需要安装才能成为项目的依赖项。这样可以更轻松地获取更新并保持项目整洁。该页面如下所示:17.突出显示更新可以说,这是每个开发人员工具包中都应该包含的基本工具。HighlightUpdates是ReactDevTools的扩展,可让您查看页面上的哪些组件不必要地重新呈现。它们会用橙色/红色标记严重的重渲染问题,帮助我们在开发页面时更容易发现一些性能问题。除非我们的目标是构建平庸的应用程序,否则为什么不尝试一下我们周围的好东西。18.ReactDiffViewerReactDiffViewer是一个使用Diff和React制作的简单而漂亮的文本差异查看器。支持多种功能,如:分屏视图、内联视图、worddiff、行高亮等。如果我们想将此功能嵌入记事本(如Boostnote)并自定义到应用程序中(如主题颜色),这将很有用、故事介绍文件组成等)。19.JS.coachJS.coach是我经常用来查找React相关资料的网站。我不知道为什么没有多少人提到这个网站,但在这个页面上我找到了几乎所有我需要的信息,它快速、方便,并且不断更新,总能为我的所有项目提供理想的结果。最近,他们添加了一个ReactVR选项卡,真的很酷!20.AwesomeReactAwesomeReactOpenSourceLibraries是与React相关且令人敬畏的列表。这让我忘记了其他站点只能通过此链接学习React。因为你可以在这里找到很多有用的资源,这一定会帮助我们构建很棒的React应用程序!21.ProtonNativeProtonNative为大家提供了一个React环境来构建跨平台的原生桌面应用。它是Electron的替代品,只有一些简洁的功能,包括:与ReactNative相同的语法与现有的React库一起工作,如Redux不再有Electron的跨平台原生组件与所有普通的Node.js包兼容更多的?请阅读他们的文档。22.DevhintsReact.jsCheatsheet一个不错的React备忘单,尽管它缺少ReactHooks。别担心,我将为Reactv16.8+创建一个备忘单,敬请期待。结束语以上就是本次分享的所有工具。希望您能在这里找到有价值的信息。