首页 > 其他分享 >提升项目水平的5个React库

提升项目水平的5个React库

时间:2023-06-25 10:23:33浏览次数:43  
标签:github 开发人员 样式 项目 应用程序 React 提升 组件

长话短说

在本文中,我们将介绍 5 个库,它们可以解决 React 开发中一些最常见的痛点(例如数据获取、样式、可访问性和状态管理),从而对您的 React 开发体验产生积极影响。

(更|多优质内|容:java567 点 c0m)

 

介绍

掌握 React 的基础知识很重要。事实上,无需大量额外的库,您就可以取得很大的成果。但是有一些基础工具可以将您的 React 开发体验提升到一个新的水平。这些库解决了 React 开发中最常见的痛点,例如数据获取、样式、可访问性和状态管理,并且它们以最小且非侵入的方式实现。这使得您可以在整个代码库中逐步采用。

我们列出了五个我们认为您应该了解的此类库。

为什么这很重要

共享开发工具并影响开发人员体验非常重要。当开发人员能够使用正确的工具和资源时,他们可以花更多的时间进行构建和创造,而减少分心、开销和挫折的时间。

这就是为什么我们总是在寻找有用的项目来分享,这也是为什么我们最近推出了自己的开源工具“Preevy”,github:/livecycle/preevy。

开发人员使用 Preevy 轻松创建可共享的预览环境,并更好地与其他人就最新更改进行协作。

你能看看Preevy并给我们留下一颗星星吗?它确实帮助我们继续向开源社区贡献有用的工具和内容。

谢谢❤️❤️❤️!

现在,我们的介绍已经结束,让我们开始了解这些工具的全部内容。

 

动图

 

TanStack React 查询

github:/TanStack/query

 

简而言之,React Query 使在 React 中获取数据成为一种更好的体验。但它本身并不是一个数据获取库。相反,它是一个处理异步服务器状态的状态管理库。您为其提供了一个异步函数,然后用于获取数据。然后,该useQuery钩子为您提供了一堆有用的实用程序来处理异步函数:

  • 加载标志

  • 结果缓存

  • 结果失效和重新获取

这听起来没那么严重。但它对大型代码库的影响不可低估。通常,代码库具有大量逻辑来全局共享获取结果、在数据更改时刷新这些结果、触发获取数据等等。使用 React Query 时,大部分内容都不再需要。缓存意味着您可以在整个应用程序中调用挂钩useQuery,并且数据在所有事件之间共享。

健康)状况

github:/pmndrs/zustand

 

每个 React 开发人员都知道在应用程序中共享状态所涉及的痛苦。当第一次遇到这个问题时,您不可避免地会在组件树上“钻取”数据。不用说,这不会产生干净的代码,从长远来看也是不可持续的。

值得庆幸的是,React 提出了Context 提供者来解决这个问题。如果您需要做的只是在组件树中传递一些值,那么上下文就非常有用。但对于更复杂的全球商店来说,它可能会变得很麻烦。两者都是因为开发人员需要小心性能影响,而且一些开发人员不太喜欢它的 API。

如果您想从 Context 进行设置,Zustand 是您的最佳选择。它提供了一个极其简单的 API,可让您创建具有值和函数的商店。然后,您可以从应用程序中的任何位置访问该存储以读取和写入值。包括反应性!如果您想在存储中存储嵌套对象数据,请考虑使用Immer和 Zustand 来轻松更改嵌套状态。

成帧器运动

github:/framer/motion

 

动画是给你的 React 应用程序带来现代和精致感觉的最佳方式之一。但这并不容易。使用 CSS 动画很棘手,并且可能会产生大量代码。相比之下,Framer Motion 提供了强大但简单的 API 来创建自定义动画。它通过一组钩子和组件原生集成到 React 生态系统中。

例如,以下代码是平滑地动画从圆形到正方形的转换所需的全部内容:

 import { motion } from "framer-motion"
 ​
 export const MyComponent = () => (
  <motion.div
    animate={{
      scale: [1, 2, 2, 1, 1],
      rotate: [0, 0, 270, 270, 0],e     borderRadius: ["20%", "20%", "50%", "50%", "20%"],
    }}
  />
 )

 

数组中的每个值代表相应属性的一个关键帧。然后动画会循环播放。当然,您可以做的不仅仅是使用 Framer Motion 定义关键帧。您还可以对布局中的更改进行动画处理、处理手势或基于滚动进行动画处理。

类别差异管理局 (CVA)

github:/joe-bell/cva

 

TailwindCSS 已迅速成为 React 应用程序样式的主要方式。但用它构建可重用的 UI 元素可能是一个挑战。假设您使用 Tailwind 创建自己的自定义样式按钮。由于您想在整个应用程序中重用它,因此您创建了一个组件。但现在您需要该组件的多个变体。主要风格和次要风格。所以现在您需要根据 prop 值将 Tailwind 类组合在一起。现在您还需要不同颜色和不同尺寸的按钮。因此,添加一些 props 甚至更多条件逻辑来找出 Tailwind 类的正确组合。这很快就会让人沮丧。

输入 CVA,是 Class Variance Authority 的缩写。这是一个简单的库,可以消除使用 Tailwind 类名构建可组合 React 组件的痛苦,以他们的文档为例:

 import React from "react";\
 import { cva, type VariantProps } from "class-variance-authority";****\
 ​
 const button = cva("button", {\
  variants: {\
    intent: {\
      primary: [\
        "bg-blue-500",\
        "text-white",\
        "border-transparent",\
        "hover:bg-blue-600",\
      ],\
      secondary: [\
        "bg-white",\
        "text-gray-800",\
        "border-gray-400",\
        "hover:bg-gray-100",\
      ],\
    },\
    size: {\
      small: \["text-sm", "py-1", "px-2"],\
      medium: \["text-base", "py-2", "px-4"],\
    },\
  },\
  compoundVariants: \[{ intent: "primary", size: "medium", class: "uppercase" }],\
  defaultVariants: {\
    intent: "primary",\
    size: "medium",\
  },\
 });
 ​
 export interface ButtonProps\
  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\
    VariantProps<typeof button> {}****\
 export const Button: React.FC<ButtonProps> = ({\
  className,\
  intent,\
  size,\
  ...props\
 }) => <button className={button({ intent, size, className })} {...props}
 />;

 

我们以声明方式描述每个参数值的按钮样式。然后,CVA 会找出正确的样式组合。我们甚至可以指定默认变体以使某些属性成为可选的。

基数用户界面

github:/radix-ui/primitives

 

如果您喜欢构建完全自定义样式的界面,但不想处理从头开始开发高保真可访问 UI 组件的复杂问题,Radix UI 适合您。该库附带了各种常用的 UI 组件。例如对话框、复选框和下拉菜单。但有一个转折。

虽然组件包含所有逻辑和交互性,但它们的样式为零。这意味着您可以完全控制自己设计组件的样式。这使您能够构建一个真正的自定义 UI 系统,该系统与其他网站不同。在完全控制样式的同时,Radix 会为您完成所有其他工作。所有组件都可以完全访问 - 例如通过键盘导航。

如果您喜欢 Radix 的灵活性,但又不想从头开始设计所有内容,那么您应该检查一下shadcn/ui 。它是一个构建在 Radix 和 Tailwind 之上的完全模块化的组件库。您可以将代码直接复制到您的项目中并根据您的喜好进行修改,而不是安装 NPM 包。

包起来

本文讨论的库可以帮助您将 React 应用程序提升到一个新的水平。采用它们将帮助您的应用程序为用户和开发人员提供更好的体验。您可以在项目中逐步采用所有这些方法,而不是进行一项重大更改。而且它们上手非常简单。因此,在开始编码之前无需花费数小时来研究文档。

希望您觉得这有帮助!

(更|多优质内|容:java567 点 c0m)

标签:github,开发人员,样式,项目,应用程序,React,提升,组件
From: https://www.cnblogs.com/web-666/p/17502270.html

相关文章

  • 「思维拓展/个人提升」简说
    这里想要记录的是除了专业领域知识之外的见识,艺术、文学、商业、经济、生物、创业、IT、物理、哲学、心理学等等领域,千万不要把自己局限在一个小的圈子里。虽说术业有专攻,但也不是让你将自己限死在一个领域,事实上,行业之间,知识之间是互通的,生物上面的一个创新可能是你的一个创业idea......
  • create-react-app 除了NODE_ENV如何区分环境变量
    比如webpack打包的时候,可能要打包到测试环境或者生产环境,但是这时候NODE_ENV的值都是production,这个时候如何区分呢。答案是:cross-env和webpack.DefinePlugin1.定义环境变量到编译环境:测试环境: cross-envNODE_STAGE=testnpmrunbuild预上线: cross-envNODE_STAGE=s......
  • 强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0
    强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v01、定义算法相比于Qlearning,DQN本质上是为了适应更为复杂的环境,并且经过不断的改良迭代,到了NatureDQN(即VolodymyrMnih发表的Nature论文)这里才算是基本完善。DQN主要改动的点有三个:使用深度神经网络替......
  • 百度Amis+React低代码实践
    背景在项目中有集成低代码平台的想法,经过多方对比最后选择了amis,主要是需要通过amis进行页面配置,导出json供移动端和PC端进行渲染,所以接下来讲一下近两周研究amis的新的以及一些简单经验,供大家参考.什么是amisamis是一个低代码前端框架,它使用JSON配置来生成......
  • React - 10 react中的合成事件
    1.react中的合成事件推荐使用箭头函数,不用管this,但是如果要传参,还得通过bind,事件对象永远是最后一个参数importReactfrom"react";classDemoextendsReact.Component{/*基于React内部的处理,如果我们给合成事件绑定一个“普通函数”,当事件行为触发,绑定的函数执行;......
  • 基于.NetCore开发博客项目 StarBlog - (29) 开发RSS订阅功能
    前言最近忙中偷闲把博客的评论功能给做完了,我可以说这个评论功能已经达到「精致」的程度了......
  • 分享我的 Shell 环境,git 操作效率提升 100% !
    换到一个新的开发环境,蛮多东西要折腾的。特地整理了一下,下次换新电脑也方便。git:不使用rebase,要加上这个设置:gitconfig--globalpull.rebasefalse全局配置工作用户名和邮箱,不然会影响到你提交代码:gitconfig--globaluser.name"???"gitconfig--globaluser.email......
  • springcloud项目启动后立即停止
    刚学完springcloud,只看了一遍课没有动手实践,现在第一次自己动手操作的时候不知道该选哪些依赖该怎么配置。依赖全选上后因为各自配置问题运行不起来,只能先从最简单的开始慢慢加依赖。这次只选了nacos和feign,成功运行,项目也没有报错,但是运行后项目立马停止。 百度了一下原因......
  • 狂刷项目
    001瑞吉外卖2023年6月23日day3配置CategoryController时候,导入资料中的实体类会莫名其妙报错,查看控制到得知,有一个is_deleted的属性在数据表中不存在,而按照视频的进度来说,应该先注释掉这个属性2023年6月24日还是CategoryController,到删除阶段,一个很经典的问题,导入......
  • 利用颜色编码提升阅读笔记效率
    在我们的阅读和学习过程中,如何有效地区分、组织和回顾信息是一个重要的议题。使用颜色编码的阅读笔记方法,将不同类型的信息用不同颜色进行标记,可以帮助我们快速定位所需信息,并通过色彩的视觉效果加强记忆。然而,这并不是唯一的学习策略,也不一定适合每一个人。有些人可能只用一种颜......