Headless UI v1.4:包含选项卡的版本

Adam Wathan
Robin Malfait

我们刚刚发布了 Headless UI v1.4,其中包括一个全新的 Tab 组件,以及用于更轻松地手动关闭 PopoverDisclosure 组件的新 API。

Headless UI v1.4

选项卡

今年早些时候,我们开始开发 Tailwind UI Ecommerce,很快就意识到我们需要在 Headless UI 中支持选项卡,以便能够构建我们正在设计的新界面。

来自 Tailwind UI Ecommerce 的产品详情界面设计。

这是我们最终得到的结果:

import { Tab } from '@headlessui/react'function MyTabs() {  return (    <Tab.Group>      <Tab.List>        <Tab>Tab 1</Tab>        <Tab>Tab 2</Tab>        <Tab>Tab 3</Tab>      </Tab.List>      <Tab.Panels>        <Tab.Panel>Content 1</Tab.Panel>        <Tab.Panel>Content 2</Tab.Panel>        <Tab.Panel>Content 3</Tab.Panel>      </Tab.Panels>    </Tab.Group>  )}

没错,这些就是选项卡!

像所有 Headless UI 组件一样,这完全抽象了键盘导航等内容,因此您可以以完全声明的方式创建自定义选项卡,而无需考虑任何棘手的可访问性细节。

查看文档以了解更多信息。

关闭 Disclosure 和 Popover

到目前为止,没有办法在不单击用于打开它的实际按钮的情况下关闭 Disclosure。对于典型的 disclosure 用例来说,这没什么大不了的,但对于移动导航等情况,当有人单击_内部_的链接时关闭它通常是有意义的。

现在,您可以在 disclosure 面板中使用 Disclosure.Button 或(Vue 中的 DisclosureButton)来关闭面板,从而可以轻松地包装链接或其他按钮,以便面板不会保持打开状态:

import { Disclosure } from '@headlessui/react'import MyLink from './MyLink'function MyDisclosure() {  return (    <Disclosure>      <Disclosure.Button>Open mobile menu</Disclosure.Button>      <Disclosure.Panel>        <Disclosure.Button as={MyLink} href="/home">          Home        </Disclosure.Button>        {/* ... */}      </Disclosure.Panel>    </Disclosure>  )}

同样的事情也适用于 Popover 组件:

import { Popover } from '@headlessui/react'import MyLink from './MyLink'function MyPopover() {  return (    <Popover>      <Popover.Button>Solutions</Popover.Button>      <Popover.Panel>        <Popover.Button as={MyLink} href="/insights">          Insights        </Popover.Button>        {/* ... */}      </Popover.Panel>    </Popover>  )}

如果您需要更精细的控制,我们还通过渲染属性/作用域插槽传递 close 函数,因此您可以在需要时以命令式方式关闭面板:

import { Popover } from '@headlessui/react'function MyPopover() {  return (    <Popover>      <Popover.Button>Terms</Popover.Button>      <Popover.Panel>        {({ close }) => (          <button            onClick={async () => {              await fetch('/accept-terms', { method: 'POST' })              close()            }}          >            Read and accept          </button>        )}      </Popover.Panel>    </Popover>  )}

有关更多详细信息,请查看更新后的 PopoverDisclosure 文档。

立即尝试

Headless UI v1.4 是一个小更新,因此没有重大更改。要升级,只需通过 npm 安装最新版本:

# 对于 Reactnpm install @headlessui/react# 对于 Vuenpm install @headlessui/vue

查看官方网站获取最新文档,如果您想要使用大量样式化示例,可以查看 Tailwind UI

准备好试试看了吗? 访问 Headless UI 网站 →

Get all of our updates directly to your inbox.
Sign up for our newsletter.