Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 关于我们
  • 网站投稿
  • 赞助一下

关闭

搜索

在线工具_工作生活好帮手

打造各种简单、易用、便捷的在线工具,网友无需注册和下载安装即可使用

点击查看

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
提交资源 / 链接反馈

TanStack

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://tanstack.com
GitHub:https://github.com/TanStack
网站描述:专为现代 Web 开发设计的开源库集合
访问官网 GitHub

TanStack 是一套专为现代 Web 开发设计的开源库集合,它提供了一系列高性能、无头(Headless)且类型安全的工具。简单来说,它就像是一个"工具包",里面装满了各种实用的开发工具,帮助开发者更轻松地构建复杂的 Web 应用。


为什么选择 TanStack?

  • • 高性能:经过精心优化,确保应用运行流畅
  • • 无头设计:只提供逻辑,不限制样式,给你完全的视觉控制权
  • • 类型安全:基于 TypeScript,减少运行时错误
  • • 框架无关:支持 react、vue、angular、Svelte 等主流框架
  • • 模块化:按需使用,不会增加不必要的代码体积


️ 安装和配置

基础安装

pnpm add @tanstack/react-table @tanstack/react-query @tanstack/react-form @tanstack/react-virtual

配置 Query Client

// main.jsx 或 App.jsx
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 5 * 60 * 1000, // 5分钟
      cacheTime: 10 * 60 * 1000, // 10分钟
    },
  },
});

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      {/* 你的应用组件 */}
    </QueryClientProvider>
  );
}


核心组件详解

1. TanStack Table - 表格神器

适用场景:需要展示大量数据、支持排序、筛选、分页的表格

核心特性:

  • • 支持百万级数据渲染
  • • 内置搜索和筛选功能
  • • 响应式设计
  • • 虚拟滚动(只渲染可见行)
  • • 完全可定制

简单示例:

import { useReactTable, getCoreRowModel } from "@tanstack/react-table";

function MyTable({ data }) {
  const table = useReactTable({
    data,
    columns: [
      { accessorKey: "name", header: "姓名" },
      { accessorKey: "age", header: "年龄" },
      { accessorKey: "email", header: "邮箱" },
    ],
    getCoreRowModel: getCoreRowModel(),
  });

  return (
    <table>
      <thead>
        {table.getHeaderGroups().map((headerGroup) => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map((header) => (
              <th key={header.id}>{header.column.columnDef.header}</th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody>
        {table.getRowModel().rows.map((row) => (
          <tr key={row.id}>
            {row.getVisibleCells().map((cell) => (
              <td key={cell.id}>{cell.getValue()}</td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

2. TanStack Query - 数据获取专家

适用场景:需要管理服务器状态、缓存数据、处理加载状态

核心特性:

  • • 自动缓存和同步
  • • 后台更新
  • • 自动重试机制
  • • 乐观更新
  • • 无限滚动支持

简单示例:

import { useQuery } from "@tanstack/react-query";

function UserProfile({ userId }) {
  const {
    data: user,
    isLoading,
    error,
  } = useQuery({
    queryKey: ["user", userId],
    queryFn: () => fetch(`/api/users/${userId}`).then((res) => res.json()),
    staleTime: 5 * 60 * 1000, // 5分钟内数据被认为是新鲜的
  });

  if (isLoading) return <div>加载中...</div>;
  if (error) return <div>出错了: {error.message}</div>;

  return (
    <div>
      <h1>{user.name}</h1>
      <p>{user.email}</p>
    </div>
  );
}

3. TanStack Form - 表单管理大师

适用场景:复杂的表单验证、动态表单、多步骤表单

核心特性:

  • • 强大的验证系统
  • • 实时验证
  • • 动态字段
  • • 类型安全
  • • 高性能

简单示例:

import { useForm } from "@tanstack/react-form";

function ContactForm() {
  const form = useForm({
    defaultValues: {
      name: "",
      email: "",
      message: "",
    },
    onSubmit: async ({ value }) => {
      console.log("提交的数据:", value);
    },
  });

  return (
    <form
      onSubmit={(e) => {
        e.preventDefault();
        form.handleSubmit();
      }}
    >
      <div>
        <form.Field
          name="name"
          validators={{
            onChange: ({ value }) => (!value ? "姓名不能为空" : undefined),
          }}
        >
          {(field) => (
            <>
              <input
                value={field.state.value}
                onChange={(e) => field.handleChange(e.target.value)}
                placeholder="请输入姓名"
              />
              {field.state.meta.errors && (
                <span style={{ color: "red" }}>
                  {field.state.meta.errors[0]}
                </span>
              )}
            </>
          )}
        </form.Field>
      </div>

      <button type="submit">提交</button>
    </form>
  );
}

4. TanStack Virtual - 虚拟滚动专家

适用场景:需要渲染大量列表项(如聊天记录、商品列表)

核心特性:

  • • 只渲染可见元素
  • • 支持水平/垂直滚动
  • • 动态高度支持
  • • 完全可定制

简单示例:

import { useVirtualizer } from "@tanstack/react-virtual";

function VirtualList({ items }) {
  const parentRef = useRef();

  const virtualizer = useVirtualizer({
    count: items.length,
    getScrollElement: () => parentRef.current,
    estimateSize: () => 50, // 估算每个项目的高度
  });

  return (
    <div
      ref={parentRef}
      style={{
        height: "400px",
        overflow: "auto",
      }}
    >
      <div
        style={{
          height: `${virtualizer.getTotalSize()}px`,
          width: "100%",
          position: "relative",
        }}
      >
        {virtualizer.getVirtualItems().map((virtualItem) => (
          <div
            key={virtualItem.key}
            style={{
              position: "absolute",
              transform: translateY( 0,
              left: 0,
              width: "100%",
              height: `${virtualItem).size}px`,
              transform: `translateY(${virtualItem.start}px)`,
            }}
          >
            {items[virtualItem.index]}
          </div>
        ))}
      </div>
    </div>
  );
}


常见问题解决

Q: 如何自定义表格样式?

A: TanStack Table 是无头的,你可以完全自定义样式:

.my-table {
  border-collapse: collapse;
  width: 100%;
}

.my-table th,
.my-table td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

.my-table th {
  background-color: #f2f2f2;
}

Q: 如何处理大量数据?

A: 结合使用 TanStack Query 和 TanStack Virtual:

// 分页获取数据
const { data } = useQuery({
  queryKey: ["users", page],
  queryFn: () => fetchUsers({ page, limit: 100 }),
});

// 虚拟滚动渲染
const virtualizer = useVirtualizer({
  count: data?.length || 0,
  getScrollElement: () => parentRef.current,
  estimateSize: () => 50,
});


TanStack 提供了一套完整、现代且类型安全的工具集,特别适合构建复杂的数据密集型应用。它的无头设计让你拥有完全的样式控制权,而强大的功能则让开发变得更加高效。无论你是要构建一个数据表格、管理复杂的表单,还是处理大量的列表数据,TanStack 都能为你提供完美的解决方案。开始使用 TanStack,让你的 Web 应用更加出色!

仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/4713

more>>
相关栏目
react
Facebook开发的一款高效、灵活、声明式设计的JS库
官网 GitHub
AngularJS
Google推出有条理,可维护,易编程的MVVM框架
官网 GitHub
backbone
提供:模型、集合、视图,开发重量级的javascript应用的框架
官网 GitHub
jquery
一个快速、简洁的JavaScript代码库
官网 GitHub
zepto.js
一个轻量级的针对现代高级浏览器的JavaScript库
官网 GitHub
Ember
JavaScript MVC框架,它用来创建复杂的Web应用程序,消除了样板
官网 GitHub
nw.js
轻量级桌面应用开发的捷径
官网 GitHub
socket.io
一个WebSocket库,包括了客户端的js和服务器端的nodejs
官网 GitHub
nuxt.js
基于 Vue.js 的轻量级、服务端渲染 (SSR) 应用框架
官网 GitHub
Next.js
实现react的服务端渲染的框架
官网 GitHub
Electron
基于Chromium 和 Node.js, 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
官网 GitHub
htmx
无需JavaScript的动态HTML
官网 GitHub
Nerv
一款由京东凹凸实验室打造的类React前端框架
官网 GitHub
lodash
一致性、模块化、高性能的 JavaScript 实用工具库
官网 GitHub
ocLazyLoad
AngularJS 的延迟加载(惰性加载)模块和组件
点击进入 GitHub
weui.js
WeUI 的轻量级 js 封装
点击进入 GitHub
首页 技术导航 在线工具 技术文章 教程资源 AI工具集 前端库/框架 实用工具箱

Copyright © 2018 Web前端开发网提供免费在线工具、编程学习资源(教程/框架/库),内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。

手机预览