使用高级 Chakra UI 组件,更快地构建 💎
了解更多我们很高兴地宣布 Chakra UI v3.3.0 发布!本次发布带来了多项令人兴奋的新功能和改进,以提升您的开发体验。
新的QRCode
组件允许用户为各种用例生成二维码。此组件非常适合需要生成二维码以共享信息的应用程序。
import { QrCode } from "@chakra-ui/react"
const Demo = () => {
return (
<QrCode.Root value="https://www.google.com">
<QrCode.Frame>
<QrCode.Pattern />
</QrCode.Frame>
</QrCode.Root>
)
}
我们展示了如何使用 FileUpload
组件处理从剪贴板粘贴的文件。
"use client"
import {
FileUpload,
Float,
HStack,
Input,
type InputProps,
useFileUploadContext,
} from "@chakra-ui/react"
import { HiX } from "react-icons/hi"
const FilePasteInput = (props: InputProps) => {
const fileUpload = useFileUploadContext()
return (
<Input
{...props}
onPaste={(e) => {
fileUpload.setClipboardFiles(e.clipboardData)
}}
/>
)
}
const FileImageList = () => {
const fileUpload = useFileUploadContext()
return (
<HStack wrap="wrap" gap="3">
{fileUpload.acceptedFiles.map((file) => (
<FileUpload.Item
p="2"
width="auto"
key={file.name}
file={file}
pos="relative"
>
<Float placement="top-start">
<FileUpload.ItemDeleteTrigger
p="0.5"
rounded="l1"
bg="bg"
borderWidth="1px"
>
<HiX />
</FileUpload.ItemDeleteTrigger>
</Float>
<FileUpload.ItemPreviewImage
boxSize="12"
rounded="l1"
objectFit="cover"
/>
</FileUpload.Item>
))}
</HStack>
)
}
const Demo = () => {
return (
<FileUpload.Root maxFiles={3} accept="image/*">
<FileUpload.HiddenInput />
<FileImageList />
<FilePasteInput placeholder="Paste image here..." />
</FileUpload.Root>
)
}
我们展示了如何在使用 hideWhenDetached
定位选项时,在菜单与其触发器分离时隐藏菜单内容。
项目0
项目1
项目2
项目3
项目4
项目5
import { Box, Center, Flex, Menu, Portal, Text } from "@chakra-ui/react"
const Demo = () => {
return (
<Center minH="sm">
<Flex
w="300px"
h="full"
overflowX="auto"
gapX="6"
p="4"
borderWidth="1px"
bg="bg.subtle"
>
{[...Array(6).keys()].map((x) => (
<Box layerStyle="fill.surface" p="4" borderRadius="md" key={x}>
<Text>Item{x}</Text>
</Box>
))}
<Box>
<Menu.Root positioning={{ hideWhenDetached: true }}>
<Menu.Trigger asChild>
<Box as="button" bg="green.100" p="4" borderRadius="md">
Menu
</Box>
</Menu.Trigger>
<Portal>
<Menu.Positioner>
<Menu.Content>
<Menu.Item value="new-txt">New Text File</Menu.Item>
<Menu.Item value="new-file">New File...</Menu.Item>
<Menu.Item value="new-win">New Window</Menu.Item>
<Menu.Item value="open-file">Open File...</Menu.Item>
<Menu.Item value="export">Export</Menu.Item>
</Menu.Content>
</Menu.Positioner>
</Portal>
</Menu.Root>
</Box>
</Flex>
</Center>
)
}
我们增强了 CLI,提供了更灵活的代码片段安装选项
默认情况下,CLI 会检测您的项目是否为 TypeScript 项目,并安装相应的 jsx 或 tsx 代码片段。
使用此标志,您可以明确安装 jsx 或 tsx 代码片段。
npx @chakra-ui/cli@latest snippet add [...components] --tsx
本次发布还包括重要的错误修复
折叠组件(Collapsible):修复了在已打开的折叠组件重新渲染时,打开动画会重新播放的错误。
对话框(Dialog)、弹出框(Popover):修复了在焦点元素从 DOM 中移除时,导致对话框或弹出框关闭的问题。
文件上传(FileUpload):修复了隐藏输入与接受的文件不同步的错误。
菜单(Menu)、弹出框(Popover):修复了当触发器位于可滚动容器内时,组件外部交互检测不一致的问题。
分页(Pagination):纠正了当 pageSize
超过 count
时,页面范围返回不正确的 end
值的问题。
图片(Image):修复了 htmlWidth
和 htmlHeight
在 Image
或 chakra.image
元素中不起作用的问题。
系统
bg
、bgColor
、bgImage
等常见速记属性。colorPalette
属性导致复合变体匹配不工作的问题。要升级到最新版本,请运行
npm install @chakra-ui/react@latest