使用高级 Chakra UI 组件更快地构建 💎

了解更多
跳到内容
文档演练场指南博客
赞助

选择 (原生)

用于从预定义选项中选择一个值。

源代码Storybook配方

用法

import { NativeSelect } from "@chakra-ui/react"
<NativeSelect.Root>
  <NativeSelect.Field>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
  </NativeSelect.Field>
  <NativeSelect.Indicator />
</NativeSelect.Root>
信息
如果您喜欢封闭的组件组合,请查看以下代码片段

示例

尺寸

使用 size prop 来改变选择组件的尺寸。

变体

使用 variant prop 来改变选择组件的外观。

受控

使用 valueonChange props 来控制选择组件。

禁用

disabled prop 传递给 NativeSelect.Root 组件以禁用选择组件。

无效

组合原生和 Field 组件来设置无效状态并显示错误文本。

这是一个错误

或者,您也可以在 NativeSelect.Root 组件上使用 invalid prop。

Hook Form

以下是如何将 NativeSelect 组件与 react-hook-form 一起使用的示例。

引用

以下是如何访问底层元素引用

import { NativeSelect } from "@chakra-ui/react"

const Demo = () => {
  const ref = useRef<HTMLSelectElement | null>(null)
  return (
    <NativeSelect.Root>
      <NativeSelect.Field ref={ref}>
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
      </NativeSelect.Field>
      <NativeSelect.Indicator />
    </NativeSelect.Root>
  )
}

封闭组件

以下是如何为封闭组件组合设置 Native Select。

"use client"

import { NativeSelect as Select } from "@chakra-ui/react"
import * as React from "react"

type FieldProp = "name" | "value" | "onChange" | "defaultValue"

interface NativeSelectProps
  extends Omit<Select.RootProps, FieldProp>,
    Pick<Select.FieldProps, FieldProp> {
  icon?: React.ReactNode
  items: Array<{ label: string; value: string; disabled?: boolean }>
}

export const NativeSelect = React.forwardRef<
  HTMLSelectElement,
  NativeSelectProps
>(function NativeSelect(props, ref) {
  const {
    icon,
    children,
    name,
    items,
    value,
    defaultValue,
    onChange,
    ...rest
  } = props
  return (
    <Select.Root {...rest}>
      <Select.Field
        ref={ref}
        name={name}
        value={value}
        defaultValue={defaultValue}
        onChange={onChange}
      >
        {children}
        {items?.map((item) => (
          <option key={item.value} value={item.value} disabled={item.disabled}>
            {item.label}
          </option>
        ))}
      </Select.Field>
      <Select.Indicator>{icon}</Select.Indicator>
    </Select.Root>
  )
})

如果您想自动将封闭组件添加到您的项目中,请运行此命令

npx @chakra-ui/cli snippet add native-select

属性

属性默认值类型
colorPalette 'gray'
'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'

组件的调色板

variant 'outline'
'outline' | 'subtle' | 'plain'

组件的变体

size 'md'
'xs' | 'sm' | 'md' | 'lg' | 'xl'

组件的尺寸

as
React.ElementType

要渲染的底层元素。

asChild
boolean

使用提供的子元素作为默认渲染元素,结合它们的属性和行为。

欲了解更多详情,请阅读我们的 组合 指南。
unstyled
boolean

是否移除组件的样式。

上一个

Segmented Control

下一个

Select