2023年提升您React项目的五个库

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

一、React Query

https://github.com/TanStack/query

图片图3

简而言之,React Query 可以使在 React 中获取数据体验更好。其是一个处理异步服务器状态的状态管理库,通过提供了一个异步函数来获取数据。此外,useQuery hook提供了一堆有用的实用程序来处理异步函数:

  • 加载标志
  • 结果缓存
  • 结果失效和重新获取

这些特性对大型项目具有较大价值。一般情况下,项目中需要在全局共享获取结果、在数据更改时刷新这些结果、触发获取数据等等。使用 React Query 时,很多情况都不需要自己再进行处理。缓存意味着您可以在应用程序的任何位置调用useQuery hook,并且数据在所有出现的位置之间共享。

二、Zustand

https://github.com/pmndrs/zustand

图片图片1

在React开发的程序中肯定会涉及到组件间状态共享,我们可以通过props来实现,但是这并不利于代码的维护,后来React提供了Context Providers来进行组件间状态共享,但是对于复杂的全局存储,Context可能会变的很繁琐,有可能导致性能问题。为了更好的使用Context,可以使用Zustand,其提供了一个极其简单的API来创建一个store,可以从应用程序的任何位置访问该store并读取和写入值。

三、Framer Motion

https://github.com/framer/motion

图片图5

动画是赋予React应用程序现代和精致感的最佳方式之一。但这并不容易。使用CSS动画很棘手,可能会导致大量的代码。相比之下,Framer Motion提供了一个强大但简单的API来创建自定义动画。它与React生态系统原生集成,配有一组hooks和组件。例如,将圆形平滑的变换为正方形:

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 定义关键帧。还可以动画化布局的更改、处理手势或根据滚动进行动画。

四、Class Variance Authority(CVA)

https://github.com/joe-bell/cva

图片图片2

TailwindCSS已迅速成为为React应用程序添加样式的主要方式。但使用它构建可重用的UI元素可能是一项挑战。例如,使用Tailwind创建了自定义样式按钮,该按钮会有多种样式,所以需要根据props值将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 会找出正确的样式组合。我们甚至可以指定默认变量使某些属性成为可选的。

五、Radix UI

https://github.com/radix-ui/primitives

图片图片

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

虽然组件包含所有逻辑和交互,但它们没有任何样式。这意味着完全可以自己控制组件的样式。这使能够构建一个与其它网站不同的真正定制的UI系统。在拥有完全控制样式的同时,Radix为您完成所有其他工作。所有组件都是完全可访问的,可以通过键盘导航等方式进行操作。

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

参考文章:https://livecycle.io/blogs/react-libraries/

责任编辑:武晓燕 来源: 前端点线面
相关推荐

2018-08-03 09:00:00

编程语言Python外部库

2023-12-07 14:34:00

EDA数据集数据分析

2023-04-14 09:01:23

2023-06-14 08:01:13

ReactUI 组件库

2020-09-16 14:39:13

ReactJavaScript框架

2023-06-27 17:02:05

PHP功能

2023-02-23 18:14:21

2022-12-09 17:21:42

2016-01-08 09:53:17

2022-12-09 12:10:22

2023-03-30 08:00:00

ReactJavaScript前端

2023-04-07 15:12:46

ReactReact-Intl

2022-11-28 11:28:43

2023-09-05 06:44:41

2019-09-18 20:39:07

数据科学自动化工具机器学习

2023-01-10 00:08:30

2023-02-10 12:15:48

2019-01-15 10:02:06

Kubernetes开源工具微服务

2022-07-14 11:06:07

React开发Web

2018-09-13 21:38:15

Python语言
点赞
收藏

51CTO技术栈公众号