Skip to content

Select

Hiển thị danh sách các tùy chọn để người dùng chọn—được kích hoạt bởi một nút.

Cài đặt

bash
npx @galaxy-stack/nebula-cli@latest add select
bash
pnpm dlx @galaxy-stack/nebula-cli@latest add select
bash
yarn dlx @galaxy-stack/nebula-cli@latest add select
bash
bunx @galaxy-stack/nebula-cli@latest add select
bash
# Nếu bạn đã cài galaxy-design global
galaxy-ui add select

Dependencies

Component này tự động cài đặt các dependencies sau:

  • React: @radix-ui/react-select
  • Vue: radix-vue
  • Angular: @radix-ng/primitives

Không cần cài đặt thủ công!

Sử dụng

React

tsx
import {
  Select,
  SelectTrigger,
  SelectContent,
  SelectItem,
  SelectValue,
} from "@/components/ui/select"

export default function App() {
  return (
    <Select defaultValue="apple">
      <SelectTrigger className="w-[180px]">
        <SelectValue placeholder="Chọn một loại trái cây" />
      </SelectTrigger>
      <SelectContent>
        <SelectItem value="apple">Táo</SelectItem>
        <SelectItem value="banana">Chuối</SelectItem>
        <SelectItem value="orange">Cam</SelectItem>
      </SelectContent>
    </Select>
  )
}

Vue

vue
<script setup lang="ts">
import {
  Select,
  SelectTrigger,
  SelectContent,
  SelectItem,
  SelectValue,
} from '@/components/ui/select'
</script>

<template>
  <Select default-value="apple">
    <SelectTrigger class="w-[180px]">
      <SelectValue placeholder="Chọn một loại trái cây" />
    </SelectTrigger>
    <SelectContent>
      <SelectItem value="apple">Táo</SelectItem>
      <SelectItem value="banana">Chuối</SelectItem>
      <SelectItem value="orange">Cam</SelectItem>
    </SelectContent>
  </Select>
</template>

Angular

typescript
import { Component } from '@angular/core';
import { SelectComponent } from '@/components/ui/select';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [SelectComponent],
  template: `
    <ui-select default-value="apple">
      <ui-select-trigger class="w-[180px]">
        <ui-select-value placeholder="Chọn một loại trái cây" />
      </ui-select-trigger>
      <ui-select-content>
        <ui-select-item value="apple">Táo</ui-select-item>
        <ui-select-item value="banana">Chuối</ui-select-item>
        <ui-select-item value="orange">Cam</ui-select-item>
      </ui-select-content>
    </ui-select>
  `
})
export class AppComponent {}

React Native

tsx
import {
  Select,
  SelectTrigger,
  SelectContent,
  SelectItem,
  SelectValue,
} from '@/components/ui/select'

export default function App() {
  return (
    <Select defaultValue="apple">
      <SelectTrigger>
        <SelectValue placeholder="Chọn một loại trái cây" />
      </SelectTrigger>
      <SelectContent>
        <SelectItem value="apple">Táo</SelectItem>
        <SelectItem value="banana">Chuối</SelectItem>
        <SelectItem value="orange">Cam</SelectItem>
      </SelectContent>
    </Select>
  )
}

Flutter

dart
import 'package:flutter/material.dart';
import 'package:galaxy_design/galaxy_select.dart';

class SelectExample extends StatefulWidget {
  @override
  _SelectExampleState createState() => _SelectExampleState();
}

class _SelectExampleState extends State<SelectExample> {
  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    return GalaxySelect(
      value: selectedValue,
      hint: 'Chọn một loại trái cây',
      items: [
        GalaxySelectOption(value: 'apple', label: 'Táo'),
        GalaxySelectOption(value: 'banana', label: 'Chuối'),
        GalaxySelectOption(value: 'orange', label: 'Cam'),
      ],
      onChanged: (value) {
        setState(() {
          selectedValue = value;
        });
      },
    );
  }
}

API Reference

Props

PropKiểuMặc địnhMô tảFrameworks
valuestringundefinedGiá trị được chọn được kiểm soátTất cả
defaultValuestringundefinedGiá trị ban đầu cho chế độ uncontrolledTất cả
onValueChange(value: string) => void-Được gọi khi giá trị thay đổiTất cả
openbooleanundefinedTrạng thái mở được kiểm soátReact, Vue, Angular
defaultOpenbooleanfalseTrạng thái mở ban đầuTất cả
onOpenChange(open: boolean) => void-Được gọi khi trạng thái mở thay đổiReact, Vue, Angular
disabledbooleanfalseVô hiệu hóa selectTất cả
dir'ltr' | 'rtl''ltr'Hướng đọcReact, Vue, Angular
namestring-Tên cho form submissionTất cả
requiredbooleanfalseYêu cầu giá trị trước khi submit formTất cả
className / classstring''Tên CSS classReact (className), Vue/Angular (class)

Sub-components

SelectTrigger

PropKiểuMặc địnhMô tảFrameworks
asChildbooleanfalseRender như một phần tử conReact, Vue, Angular
className / classstring''Tên CSS classReact (className), Vue/Angular (class)

SelectContent

PropKiểuMặc địnhMô tảFrameworks
position'popper' | 'item-aligned''popper'Vị trí nội dungReact, Vue, Angular
side'top' | 'bottom' | 'left' | 'right''bottom'Cạnh để render nội dungReact, Vue, Angular
sideOffsetnumber4Offset từ cạnhReact, Vue, Angular
asChildbooleanfalseRender như một phần tử conReact, Vue, Angular
className / classstring''Tên CSS classReact (className), Vue/Angular (class)

SelectItem

PropKiểuMặc địnhMô tảFrameworks
valuestring-Giá trị duy nhất cho itemTất cả
labelstring-Nhãn hiển thịTất cả
disabledbooleanfalseVô hiệu hóa itemTất cả
asChildbooleanfalseRender như một phần tử conReact, Vue, Angular

SelectValue

PropKiểuMặc địnhMô tảFrameworks
placeholderstring-Văn bản giữ chỗ khi không có giá trịTất cả
className / classstring''Tên CSS classReact (className), Vue/Angular (class)

Khả năng truy cập

  • Điều hướng bàn phím: Phím mũi tên để điều hướng, Enter để chọn, Escape để đóng
  • Đọc màn hình: Sử dụng mẫu ARIA select chuẩn
  • Quản lý focus: Quản lý focus giữa trigger và các tùy chọn
  • Tuân thủ WCAG: Tuân thủ WCAG 2.1 cấp độ AA

Tác giả

Bùi Trọng Hiếu (kevinbui)

Giấy phép

MIT © 2025 Bùi Trọng Hiếu (kevinbui)

Tác giả

Bùi Trọng Hiếu (kevinbui)

Giấy phép

MIT © 2025 Bùi Trọng Hiếu (kevinbui)

Phát hành theo Giấy phép MIT.