当前位置: 首页 > 科技观察

2020年你应该知道的React库_0

时间:2023-03-13 15:58:30 科技观察

React已经诞生很久了。自诞生以来,围绕组件驱动已经形成了非常完善的生态,但是来自其他编程语言或框架的开发者很难找到一种方式构建一个React系统的所有组件。如果您是来自Angular这样的框架的开发人员,您可能已经习惯了包含您需要的所有功能的框架,而React的核心并不包含所有可选库。这是优点还是缺点取决于您。当我从Angular切换到React时,我确实体验到了它作为React的优势。只有使用React,您才能使用功能组件和道具构建组件驱动的用户界面。它带有一些内置的解决方案,例如用于本地状态和副作用的ReactHooks。以下文章将为您提供一些自包含的方法来从互补库中进行选择以构建一个综合的React应用程序。如何开始使用React如果您是React的新手并且想创建一个React项目,请加入React的世界。有许多套件项目可供选择,每个项目都试图满足不同的需求。React社区的当前状态是通过Facebook的create-react-app(CRA)。它提供了一个零配置设置,并为您提供了一个易于启动和运行的开箱即用的React应用程序。所有工具都对您隐藏,但最终由您来更改它们。如果您已经熟悉React,则可以选择其流行的入门工具包之一:Next.js和Gatsby.js。这两个框架都建立在React之上,因此您应该已经熟悉React的基础知识。Next.js用于服务器端渲染(例如动态Web应用程序),而Gatsby.js用于静态站点生成(例如博客、登陆页面)。如果您只想了解这些入门工具包的工作原理,请尝试从头开始设置React项目。您将从一个基本的HTML和JavaScript项目开始,然后自己添加React及其支持工具。如果您想选择自定义样板项目,请尝试缩小您的要求。样板应该是最小的,不要试图解决所有问题。它应该可以解决您的问题。例如,gatsby-Firebase-authentication样板文件仅在Gatsby.js中为您提供了完整的Firebase身份验证机制,但其他所有内容都被忽略了。建议:create-react-appforReactbeginners/advancedGatsby.jsforstaticwebsitesinReactNext.jsforserver-siderenderedReactcustomReactprojecttounderstandtheunderlyingtoolsReactstatemanagementReact自带hooks来管理本地状态:useState、useReducer和useContext。所有这些都可以在React中用于复杂的本地状态管理。它甚至可以模拟Redux(Redux是一种流行的React状态管理库)。React的所有内置钩子都非常适合本地状态管理。当谈到远程数据的状态管理时,如果远程数据有GraphQL端点,我建议使用ApolloClient。ApolloClient的替代品是urql和Relay。如果远程数据不是来自GraphQL端点,请尝试使用React的Hooks来管理它。如果没有,像Redux或MobX/Mobx状态树这样的解决方案可能会有所帮助。如果您想了解更多详细信息,请访问我的综合状态管理React教程。推荐:本地状态:React的useState、useReducer、useContextHooksRemoteStateviaGraphQL:ApolloClientRemoteStateviaREST:ReactHooksorRedux/MobX/MobxStateTreeRoutingwithReactRouting在React中扮演着重要的角色。毕竟,React可以帮助您实现在客户端处理路由的单页应用程序。引入复杂路由时,有多种路由方案。最推荐的解决方案是ReactRouter。在介绍路由之前,可以先试试React的条件渲染,它不是路由的合理替代品,但对于小型应用来说已经足够了。建议:React中的ReactRouterStyleLibrary虽然React样式有很多解决方案,但作为React初学者,从内联样式和基础CSS入手还是不错的。import'./Headline.css';constHeadline=({title})=>{title}虽然内联样式可以使用JavaScript在React中动态添加样式,但外部CSS文件可以包含React应用程序的所有剩余样式。一旦您的应用程序增长,就会有许多其他样式方案选项。首先,我建议您将CSS模块作为您的CSS-in-CSS解决方案之一。CSS模块由create-react-app支持,并为您提供了一种将CSS封装到模块中的方法。这样,它就不会不小心渗入其他人的风格。虽然应用程序的某些部分仍然可以共享样式,但其他部分不必访问它。在React中,CSS模块通常与CSS文件与React组件文件共存。importstylesfrom'./style.css';constHeadline=({title})=>{title}其次,我要推荐的是所谓的样式化组件,作为React的其中之一CSS-in-JS解决方案。此方法由名为styled-components的库提供,它与React组件一起与JavaScript共享样式:importstyledfrom'styled-components';constBlueHeadline=styled.h1`color:blue;`;constHeadline=({title})=>{title}第三,我想推荐TailwindCSS作为功能性CSS解决方案:constHeadline=({title})=>{title}选择CSSinCSS、CSSinjs还是functionalCSS,由你决定。所有策略都适用于大型React应用程序。建议:CSS-in-CSSwithCSSModulesCSS-in-JSwithStyledComponentsFunctionalCSSwithTailwindCSSReactUILibrary如果你不想从头开始构建所有必要的ReactUI组件,你可以选择ReactUILibrary来做工作。所有这些都有一些基本组件,如按钮、下拉菜单、对话框和列表。React有很多UI库可供选择:AntDesignChakraUITailwindUISemanticUIMaterialUIReactBootstrap1.ReactBootstrapReactAnimations任何Web应用程序中的动画都是从CSS开始的。最终你会发现CSS动画并不是你所需要的。开发人员经常查看ReactTransitionGroup,以便他们可以使用React组件执行动画。其他知名的React动画库有:react-motionreact-springFramerMotionAnimated(ReactNative)建议:ReactTransitionGroupReact可视化和图表库如果你真的想自己从头开始构建图表,你不能不学习D3.这是一个低级可视化库,可为您提供创建精美图表所需的一切。然而,学习D3是完全不同的冒险,因此许多开发人员只想选择一个React图表库来为他们做所有事情,以换取灵活性。以下是一些流行的解决方案:nivoVictoryreact-visRechartsChartPartsReact中的表单库React最流行的表单库是Formik。它提供了从验证到提交到表单状态管理所需的一切。另一种选择是ReactHookForm。如果您开始使用更复杂的表单,这两种方法都是React应用程序的有效解决方案。建议:FormReact中的FormikReactHook数据获取库在FormReact中是快速的,你必须向远程API发出请求才能在React中获取数据。现代浏览器有一个原生的获取API来执行异步数据请求:functionApp(){React.useEffect(()=>{constresult=fetch(my/api/domain).then(response=>response.json()).then(result=>{//dosuccesshandling//e.g.storeinlocalstate});setData(result.data);});return(...);}基本上,您不需要添加任何其他库来完成这项工作。但是,有时不仅需要服务于复杂的异步请求,而且还需要具有更强大的功能,并且只能在轻量级库中使用。我推荐的这些库之一称为axios。随着应用程序的增长,它可以用来代替本地获取API。如果你有足够的时间使用GraphQLAPI,我推荐你使用ApolloClient。替代的GraphQL客户端可以是urql或Relay。建议:浏览器的本地获取APIaxiosApolloClientReact类型检查幸运的是React有自己的类型检查功能。使用PropTypes,你可以为你的React组件定义传入的props。每当您将错误的类型传递给组件时,您将在运行应用程序时收到一条错误消息。但是这种形式的类型检查应该只用于较小的应用程序。importPropTypesfrom'prop-types';constList=({list})=>

{list.map(item=>{item.title}
)}
List.propTypes={list:PropTypes.array.isRequired,};在较大的React应用程序中,TypeScript为整个应用程序添加了类型安全,而不是使用ReactPropTypes。使用此类类型检查器时,您可能会在开发过程中遇到错误。您不必启动您的应用程序来查找本可以通过此类检查避免的错误。这样,类型检查器可以改善您的开发人员体验并避免在第一时间引入错误。建议:TypeScriptReactCodingStyle对于编码风格,基本上有三种选择。第一种方法是遵循社区接受的风格指南。流行的Airbnb开源React风格指南。即使你不刻意遵循这些风格指南,阅读它们以获得React中常见编码风格的要点也是有意义的。第二种方式是使用linter,例如ESLint。虽然风格指南仅提供建议,但l??inters在应用程序中强制执行此建议。例如,您可以要求遵循流行的Airbnb风格指南,您的IED/编辑器会告诉您每一个错误。第三种也是最流行的方法是使用Prettier。它是一个强制性的代码格式化程序。您可以将它集成到您??的编辑器或IDE中,让它在您每次保存文件时格式化您的代码。也许它并不总是符合您的口味,但至少您不必再担心您自己或您团队的代码库中的代码格式。虽然Prettier不是ESLint的替代品,但它与ESLint集成得很好。建议:ESLintPrettierReact身份验证在较大的React应用程序中,您可能希望引入具有注册、登录和注销功能的身份验证。此外,通常需要密码重置和密码更改功能。这些功能远远超出了React,因为后端应用程序会为您管理这些事情。通常的方法是使用自定义身份验证实现您自己的自定义后端应用程序。如果您不想开始自己的身份验证,请考虑像Passport.js这样的东西。如果您根本不想关心后端,这三种解决方案可能适合您:FirebaseAuth0AWSCognito如果您正在寻找一体化身份验证+数据库解决方案,请坚持使用Firebase或AWS。建议:DIY:自定义后端下架:FirebaseReactHosting您可以像部署和托管任何其他Web应用程序一样部署和托管React应用程序。如果您想拥有完全的控制权,请选择像DigitalOcean这样的东西。如果您希望有人处理所有事情,Netlify是一个流行的解决方案,如果您已经在使用第三方身份验证/数据库(如Firebase),您可以检查他们是否也提供托管(如Firebase托管)。您还可以将S3的静态站点托管与Cloudfront一起使用。React测试如果您想了解有关React中测试的更多信息,请阅读:如何在React中测试组件。要点如下:测试React应用程序的支柱是Jest。它提供了一个测试运行器、断言库和间谍/模拟/存根功能,您在综合测试框架中需要的一切。至少,您可以使用React-test-renderer在Jest测试中渲染React组件。这足以用jest执行所谓的快照测试。快照测试的工作方式如下:运行测试后,将创建React组件中渲染的DOM元素的快照。当您在某个时间点再次运行测试时,将创建另一个快照,用作与前一个快照的差异。如果差异不相同,Jest将报告错误,您将不得不接受快照,或更改组件的实现。最终,您会发现自己使用Enzyme或React测试库(两者都在Jest测试环境中使用)以获得更详细的测试功能集。这两个库使得在HTML元素上呈现组件和模拟事件成为可能。Jest然后用于DOM节点上的断言。如果您正在寻找用于React-to-end(E2E)测试的测试工具,Cypress是最受欢迎的选择。建议:单元/集成/快照测试:Jest+React测试库E2E测试:Cypress2e测试:CypressToolLibraryforReactJavascript提供了许多内置功能,用于处理数组、对象、数字、对象和字符串。React中最常用的JavaScript内置函数之一是内置的map()数组。为什么?因为您总是必须在组件中呈现列表。由于JSX是HTML和JavaScript的混合体,您可以使用JavaScript映射数组并返回JSX。使用React轻松创建列表组件:constList=({list})=>
{list.map(item=>{item.title}
)}
但是,您可能需要选择提供更详细功能的实用程序库。您甚至可能希望更灵活地链接这些实用函数,甚至可能动态组合它们。此时,您将引入一个实用程序库:Lodash或Ramda。Lodash是每个JavaScript开发者都比较实用的库,而Ramda在函数式编程方面有很强的核心。请记住,现代JavaScript提供了许多开箱即用的功能,现在减少了使用实用程序库的需要。推荐:JavaScriptLodashreact和不可变数据结构本机JavaScript提供了大量内置工具来处理数据结构,就好像它们是不可变的一样。但是,如果您和您的团队觉得需要实现不可变数据结构,那么最受欢迎的选择之一就是Immer。就个人而言,我不使用它,但每当有人询问JS中的不变性时,人们都会指向Immer,这可以与redux或Reacthooks结合使用。React国际化当涉及到React应用程序的国际化时,您不仅需要考虑翻译,还需要考虑多元化、日期和货币的格式以及其他一些事情。以下是处理此问题的最流行的库:react-i18nextreact-intlLinguiJSFBT建议:react-i18nextReact富文本编辑器当谈到React中的富文本编辑器时,我只能想到以下内容,因为我没有使用任何东西React:Draft.js中的elseSlateReact中的支付与任何其他网络应用程序一样,最常见的支付提供商是Stripe和PayPal。两者都可以巧妙地集成到React中。PayPal中的时间StripeElements或StripeCheckoutReact如果您的React应用程序正在处理大量日期和时区,您应该引入一个库来为您管理这些事情。最受欢迎的库是moment.js。更轻量级的替代品是date-fns和Day.js。React桌面应用程序Electron是跨平台桌面应用程序的首选框架。但是,还有其他选择,例如:NW.jsNeutralino.jsReact的移动开发我将React从Web带到移动设备的首选解决方案仍然是ReactNative。如果您是一名ReactNative开发人员,希望创建Web应用程序,您应该查看ReactNativeWeb。REACTVR/AR老实说,我们很有可能会通过React进入虚拟现实或增强现实,我没有使用过这些库中的任何一个,但当涉及到它们时,我会想到它们ReactAR/VR:React360react-viroreact-native-arkitReact原型制作如果您有UI/UX背景,那么您可能需要一个工具来快速制作新React组件、布局或UI/UX的原型概念。我以前用Sketch,但最近改用Figma。虽然我都喜欢,但我不后悔现在使用Figma。另一个流行的工具是Framer。React文档如果您负责记录您的软件、UI库或其他内容,可以使用一些简洁的React文档工具。我广泛使用Storybook,我可以说它非常好,但我也听说过其他解决方案的好消息:StyleguidistdoczDocusaurus总结所以最终,React生态系统可以被视为React的框架,但它仍然具有灵活性.它是一个灵活的框架,您可以自行决定选择哪些库。您可以从小处着手,只添加库来解决特定问题。随着应用程序的增长,您可以一路扩展构建块。否则你可以通过使用普通的React来保持它的轻量级。因此,这里又是一个库列表,可以针对不同的项目规模补充React作为应用程序的核心。请记住,此列表是我的个人意见,我渴望得到您的反馈。小型应用程序样板:create-react-app样式库:基本CSS和内联样式异步请求:fetch或axios代码样式:无类型检查:无状态管理:ReactHooks路由:None或ReactRouter身份验证:Firebase数据库:FirebaseUI库:无表单库:无测试库:Jest实用程序库:JavaScript国际化:react-i18nextReact桌面:ElectronMediumAppBoilerplate:Next.js或Gatsby.js样式库:CSS模块或样式化组件异步请求:fetch或axios编码风格:Prettier、ESLint类型检查:无或TypeScript状态管理:ReactHooks和/或Apollo路由:ReactRouter身份验证:Firebase数据库:FirebaseUi库:无或UI组件库表单库:无或Formik或ReactHook表单测试库:Jest使用React测试库实用程序库:JavaScript国际化:react-i18nextReact桌面:Electron大型应用程序样板:Next.js、Gatsby。js,自定义设置样式库:CSS模块或样式化组件异步请求:axios或Apollo客户端代码样式:Prettier、ESLint类型检查:TypeScript状态管理:ReactHooks和/或Apollo/Redux/MobX路由:ReactRouter身份验证:Node.jsjs服务+护照.js数据库:自己提供带有SQL/NoSQLDB的Node.js服务Ui库:UI组件库或您自己的UI组件表单库:无或Formik或ReactHook表单测试库:JestwithReact测试库和Cypress实用程序库:API对于JavaScript,Lodash国际化:react-i18nextReactDesktop:Electron以前的建议是个人的你可以为你理想的React应用程序选择你自己的灵活框架。每个“理想的”React设置都是主观的,取决于开发人员和项目的需求。毕竟,没有理想的React应用程序设置。