2023 JavaScript Github 新星榜首 shadcn/ui 究竟有何独特魅力?

根据 Best of JS 网站对 2023 年新增 star 数量的分析,shadcn/ui 以 39.5k 的新增 star 数量位居榜首。看名字,你一定以为 shadcn/ui 只是一个 UI 组件库,并无特别之处。那么,它为何如此受欢迎,又有何独特魅力呢?

实际上,shadcn/ui 并不是一个组件库,而是一个组件集合。你不需要将其安装为项目依赖项,而是通过复制粘贴到你的项目中。这种设计方式颠覆了传统组件库的设计理念,但它的好处是更容易控制代码,决定组件的构建和样式。

要想知道 shadcn/ui 好不好用,还是要亲自体验一下。shadcn/ui 可以在支持 React 的框架的项目中使用,例如 Next.js、Astro、Remix、Gatsby 等。下面通过 Vite 创建一个 React 项目来体验一下。

创建 React 项目

sh 复制代码
npm create vite@latest

添加 Tailwind 和配置

sh 复制代码
npm install -D tailwindcss postcss autoprefixer

npx tailwindcss init -p

添加配置到tsconfig.json

json 复制代码
{
  "compilerOptions": {
    // ...
    "baseUrl": ".",
    "paths": {
      "src/*": [
        "./src/*"
      ]
    }
    // ...
  }
}

更新vite.config.ts

sh 复制代码
# 解决导入Nodejs path模块类型报错
npm i -D @types/node
ts 复制代码
import path from 'path'
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      src: path.resolve(__dirname, './src'),
    },
  },
})

运行 CLI 并生成components.json

sh 复制代码
npx shadcn-ui@latest init

这一步会生成components.json配置,以及src/componentssrc/lib两个文件夹,配置就已经完成了。

需要注意的是,按照原文档配置的导入路径应该是@/components@/lib/utils,按照这个生成的会直接在根目录生成@目录,导致无法正常导入。 我认为本意应该是要生成在src目录下的,CLI 工具并没有处理别名@成正确目录。所以我把上面步骤中对@别名定义都改成了src

接下来,就可以导入组件使用啦。用 CLI 工具添加一个button组件:

sh 复制代码
npx shadcn-ui@latest add button

这个命名会在src/components添加一个button组件代码,按常规代码导入即可使用。

js 复制代码
import { Button } from "./components/ui/button"

function App() {
  return (
    <Button>Click me</Button>
  )
}

export default App

效果如图所示:

从体验过程来看,将组件代码直接添加到项目中能够实现较高的自主控制程度。我们可以根据需要添加所需的样式和交互功能。对于某些情况来说,这样做确实可以提高效率,并降低代码的耦合度。举个例子,之前我使用过一个组件库,想要监听某个组件内的滚动,但是该组件并没有提供相应的方法,因此需要修改代码变得非常麻烦。这可能也是shadcn/ui组件库受到大量关注的原因之一,它具备这种灵活性。

相关推荐
豆豆41 分钟前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
JUNAI_Strive_ving1 小时前
番茄小说逆向爬取
javascript·python
看到请催我学习1 小时前
如何实现两个标签页之间的通信
javascript·css·typescript·node.js·html5
twins35202 小时前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky2 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~2 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
哪 吒2 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
Q_w77423 小时前
一个真实可用的登录界面!
javascript·mysql·php·html5·网站登录