# @cloud-ru/ds-toggles 中文文档

规范地址：https://npmcn.com/package/%40cloud-ru/ds-toggles/

版本：1\.1\.16
npm 元数据更新时间：2026-11-11T15:01:37.945Z
中文译文更新时间：2026-11-11T15:27:00.130Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cloud-ru/ds-toggles
原文对照：https://npmcn.com/package/%40cloud-ru/ds-toggles/?lang=original
项目主页：https://github.com/cloud-ru-tech/snack-v2/tree/master/packages/toggles
源码仓库：https://github.com/cloud-ru-tech/snack-v2

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：582 kB，106 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：6 个
- 首次发布：2026-08-18T12:39:59.264Z
- 最新版本发布：2026-11-11T15:01:37.609Z
- 近 30 天下载量：13580（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：64（近 12 个月 64 个）

## 中文简介

— 复选框, 电台, 切换, 喜欢 → 切换组 → + + + + + .

## 安装

```sh
npm install @cloud-ru/ds-toggles
```

也可以使用：`pnpm add @cloud-ru/ds-toggles`、`yarn add @cloud-ru/ds-toggles`、`bun add @cloud-ru/ds-toggles`

## README

# 切换

`@cloud-ru/ds-toggles` -=YTET -伊甸园字幕组=- 翻译:.

Пакет `@cloud-ru/ds-toggles` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \*`size`, (中文(简体) ), `checked/defaultChecked`, (中文(简体) ), `disabled`, (中文(简体) ), `loading`, (中文(简体) ), `onChange`{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你还得去吗`xs`, (中文(简体) ), `s`) (中文(简体) ).

## Установка

```bash
pnpm add @cloud-ru/ds-toggles
```

```ts
import { Checkbox, Radio, Switch, Favourite, ToggleGroup } from '@cloud-ru/ds-toggles'
```

## 复选框

\======== ==============================================================================================================================================================================================================.

Чекбокс. QQ QQ – 不加限制 / 检查 / 不确定 – 禁用 {} 加载 .

### Когда

-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得怎么样.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得呢.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪`indeterminate`) (中文(简体) ).

Когда **не** qQ 复选框 : @ @ @ @ @ @ @ @ @ @ @ **`Radio`**中,打开/关闭 **`Switch`**。 。 。 .

### Анатомия

#### 大小

`xs` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你应该知道, `s` - дефолт формах формах.

### Примеры

#### 1\. 国家

```tsx
import { Checkbox } from '@cloud-ru/ds-toggles';

export function CheckboxBasic() {
  return <Checkbox defaultChecked />;
}
```

#### 2\. 不确定

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢

```tsx
import { Checkbox } from '@cloud-ru/ds-toggles';

export function CheckboxIndeterminate() {
  return <Checkbox indeterminateDefault />;
}
```

#### 3\. 国家

```tsx
import { Checkbox } from '@cloud-ru/ds-toggles';

export function CheckboxStates() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <Checkbox />
      <Checkbox defaultChecked />
      <Checkbox disabled />
      <Checkbox disabled defaultChecked />
      <Checkbox loading />
    </div>
  );
}
```

### 道具

**复选框**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `autofocus` | `boolean` | —— 说 | HTML -QQ 自动聚焦 |
| `checked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `className` | `string` | —— 说 | 支助科 |
| `data-test-id` | `string` | —— 说 |  |
| `defaultChecked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `disabled` | `boolean` | `false` | HTML-QQ 已禁用 |
| `id` | `string` | —— 说 | HTML-QQ 代号 |
| `indeterminate` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `indeterminateDefault` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `inputRef` | `RefObject<HTMLInputElement>` | —— 说 |  |
| `loading` | `boolean` | `false` | Состояние |
| `name` | `string` | —— 说 | HTML-QQ 名称 |
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onChange` | `((checked: boolean) => void)` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onClick` | `MouseEventHandler<HTMLInputElement>` | —— 说 | Колбек |
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `size` | `"s"` | `"xs"` | `s` | Размер |
| `tabIndex` | `number` | —— 说 | HTML-QQ 标签索引 |
| `value` | `string` | —— 说 | HTML-QQ 值 |

##### 相关类型

-   `Size` =: `"s"` | `"xs"`

## 无线电

\-=YTET -伊甸园字幕组=- 翻译:.

{\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得呢? - Группировка через `name` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 **`ToggleGroup`** с `selectionMode='single'`。 。 。 .

### Когда

-   Для **одной** (原始内容存档于2018-10-25). qq.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你还好吧 `Select`) (中文(简体) ).

Когда **не** 电台: **`Checkbox`**,打开/关闭—— **`Switch`**。 。 。 .

### Анатомия

#### 大小

`xs` - для плотных списков опций, `s` - дефолт формах формах.

### Примеры

#### 1\. 电台

```tsx
import { Radio } from '@cloud-ru/ds-toggles';

export function RadioBasic() {
  return <Radio defaultChecked />;
}
```

#### 2\. 国家

Общий名 收音机в;выбор名автоматически

```tsx
import { Radio } from '@cloud-ru/ds-toggles';

export function RadioGroup() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <label htmlFor='delivery-courier'>
        <Radio id='delivery-courier' name='delivery' value='courier' defaultChecked /> Курьер
      </label>
      <label htmlFor='delivery-pickup'>
        <Radio id='delivery-pickup' name='delivery' value='pickup' /> Самовывоз
      </label>
      <label htmlFor='delivery-post'>
        <Radio id='delivery-post' name='delivery' value='post' /> Почта
      </label>
    </div>
  );
}
```

#### 3\. 国家

```tsx
import { Radio } from '@cloud-ru/ds-toggles';

export function RadioStates() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <Radio />
      <Radio defaultChecked />
      <Radio disabled />
      <Radio disabled defaultChecked />
      <Radio loading />
    </div>
  );
}
```

### 道具

**无线电技术**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `autofocus` | `boolean` | —— 说 | HTML -QQ 自动聚焦 |
| `checked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `className` | `string` | —— 说 | 支助科 |
| `data-test-id` | `string` | —— 说 |  |
| `defaultChecked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `disabled` | `boolean` | `false` | HTML-QQ 已禁用 |
| `id` | `string` | —— 说 | HTML-QQ 代号 |
| `inputRef` | `RefObject<HTMLInputElement>` | —— 说 |  |
| `loading` | `boolean` | `false` | Состояние |
| `name` | `string` | —— 说 | HTML-QQ 名称 |
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onChange` | `((checked: boolean) => void)` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onClick` | `MouseEventHandler<HTMLInputElement>` | —— 说 | Колбек |
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `size` | `"s"` | `"xs"` | `s` | Размер |
| `tabIndex` | `number` | —— 说 | HTML-QQ 标签索引 |
| `value` | `string` | —— 说 | HTML-QQ 值 |

##### 相关类型

-   `Size` =: `"s"` | `"xs"`

## 切换

{\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}#####################################################################################################################################################################################################################################.

{\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}我们开始吧 В `Checkbox`,Switch QQ + + + + + +.

### Когда

-   Для:настроек也.
-   申请/取消.

Когда **не** - 切换: **`Checkbox`** 提交.

### Анатомия

#### 大小

`xs` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}我.., `s` - ? ? ? - ? ? ? ? ? ? ? ? ? ? ? ? ? - ? - .

#### 图标( 默认) `false`(中文(简体) )

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎样. `showIcon` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? Спиннер `loading` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `showIcon`。 。 。 .

### Примеры

#### 1\. 开关

```tsx
import { Switch } from '@cloud-ru/ds-toggles';

export function SwitchBasic() {
  return <Switch defaultChecked />;
}
```

#### 2\. 国家

```tsx
import { Switch } from '@cloud-ru/ds-toggles';

export function SwitchSizes() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <Switch size='xs' defaultChecked />
      <Switch size='s' defaultChecked />
    </div>
  );
}
```

#### 3\. 国家

```tsx
import { Switch } from '@cloud-ru/ds-toggles';

export function SwitchStates() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <Switch />
      <Switch defaultChecked />
      <Switch disabled />
      <Switch disabled defaultChecked />
      <Switch loading />
    </div>
  );
}
```

### 道具

**切换选项**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `autofocus` | `boolean` | —— 说 | HTML -QQ 自动聚焦 |
| `checked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `className` | `string` | —— 说 | 支助科 |
| `data-test-id` | `string` | —— 说 |  |
| `defaultChecked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `disabled` | `boolean` | `false` | HTML-QQ 已禁用 |
| `id` | `string` | —— 说 | HTML-QQ 代号 |
| `inputRef` | `RefObject<HTMLInputElement>` | —— 说 |  |
| `loading` | `boolean` | `false` | Состояние |
| `name` | `string` | —— 说 | HTML-QQ 名称 |
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onChange` | `((checked: boolean) => void)` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onClick` | `MouseEventHandler<HTMLInputElement>` | —— 说 | Колбек |
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `showIcon` | `boolean` | `false` | {\\fn华文仿宋\\fs16\\1cHD1D1D1}好! {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `loading` показывается |
| `size` | `"s"` | `"xs"` | `s` | Размер |
| `tabIndex` | `number` | —— 说 | HTML-QQ 标签索引 |
| `value` | `string` | —— 说 | HTML-QQ 值 |

##### 相关类型

-   `Size` =: `"s"` | `"xs"`

## 喜欢

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}切换... {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}.

切换出"QQ"——"карточка","трек","пост". {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢.

### Когда

-   {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得怎么样.

Когда **не** 喜欢的人: **`Switch`**; для; выбора; опций **`Checkbox`**。 。 。 .

### Анатомия

#### 大小

`xs` - для плотных списков, `s` - дефолт карточках карточках.

#### 最喜欢的图标

校对:Soup `star` - «в,избранное», `heart` - 额...

### Примеры

#### 1\. 国家

```tsx
import { Favourite } from '@cloud-ru/ds-toggles';

export function FavouriteStar() {
  return <Favourite icon='star' defaultChecked />;
}
```

#### 2\. 国家

```tsx
import { Favourite } from '@cloud-ru/ds-toggles';

export function FavouriteHeart() {
  return <Favourite icon='heart' defaultChecked />;
}
```

#### 3\. 国家

```tsx
import { Favourite } from '@cloud-ru/ds-toggles';

export function FavouriteStates() {
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <Favourite icon='star' />
      <Favourite icon='star' defaultChecked />
      <Favourite icon='heart' disabled />
      <Favourite icon='heart' loading />
    </div>
  );
}
```

### 道具

**爱好**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `autofocus` | `boolean` | —— 说 | HTML -QQ 自动聚焦 |
| `checked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `className` | `string` | —— 说 | 支助科 |
| `data-test-id` | `string` | —— 说 |  |
| `defaultChecked` | `boolean` | —— 说 | HTML -QQ 已选中 |
| `disabled` | `boolean` | `false` | HTML-QQ 已禁用 |
| `icon` | `"heart"` | `"star"` | `heart` | Вариант:звезда也 |
| `id` | `string` | —— 说 | HTML-QQ 代号 |
| `inputRef` | `RefObject<HTMLInputElement>` | —— 说 |  |
| `loading` | `boolean` | `false` | Состояние |
| `name` | `string` | —— 说 | HTML-QQ 名称 |
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onChange` | `((checked: boolean) => void)` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onClick` | `MouseEventHandler<HTMLInputElement>` | —— 说 | Колбек |
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `onKeyUp` | `KeyboardEventHandler<HTMLSpanElement>` | —— 说 | 键入 |
| `size` | `"s"` | `"xs"` | `s` | Размер |
| `tabIndex` | `number` | —— 说 | HTML-QQ 标签索引 |
| `value` | `string` | —— 说 | HTML-QQ 值 |

##### 相关类型

-   `FavouriteIcon` =: `"heart"` | `"star"`
    
-   `Size` =: `"s"` | `"xs"`
    

## 切换组

(原始内容存档于2017-10-21). QQQQQ togle' – 单曲QQ多选择QQ上下文+使用TogleGroup.

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我... – 反应背景 – читают текущий выбор `useToggleGroup`。 。 。 .

### Когда

-   Сегментированный(一作выбор.
-   {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `selectionMode='multiple'`。 。 。 .
-   (原始内容存档于2017-10-21). QQQ,QQ共享状态+统一控制API.

Когда **не** - 切换组: - - **`Switch`** или **`Checkbox`**电台 电台 电台 **`Radio`** (单位:千美元) `name`。 。 。 .

### Анатомия

#### 模式

说吧 `checkbox` - мультивыбор/независимые, `radio` ——одиночный.

#### 大小

说吧 `xs` - плотный, `s` - 额...

#### 选择模式

校对:Soup `single` - +++ (+++) 无线电组, `multiple` —— qq (qq 复选框组).

### Примеры

#### 1\. 单项选择 (

```tsx
import { ToggleGroup, useToggleGroup } from '@cloud-ru/ds-toggles';
import { useState } from 'react';

function Chip({ id, label }: { id: string; label: string }) {
  const { isChecked, handleClick } = useToggleGroup({ value: id });
  return (
    <button onClick={handleClick} aria-pressed={isChecked}>
      {label}
    </button>
  );
}

export function ToggleGroupSingle() {
  const [value, setValue] = useState<string | undefined>('a');
  return (
    <ToggleGroup selectionMode='single' value={value} onChange={setValue}>
      <Chip id='a' label='A' />
      <Chip id='b' label='B' />
      <Chip id='c' label='C' />
    </ToggleGroup>
  );
}
```

#### 2\. 多重选择(QQ-QQ)

```tsx
import { ToggleGroup, useToggleGroup } from '@cloud-ru/ds-toggles';
import { useState } from 'react';

function Chip({ id, label }: { id: string; label: string }) {
  const { isChecked, handleClick } = useToggleGroup({ value: id });
  return (
    <button onClick={handleClick} aria-pressed={isChecked}>
      {label}
    </button>
  );
}

export function ToggleGroupMultiple() {
  const [value, setValue] = useState<string[]>(['a']);
  return (
    <ToggleGroup selectionMode='multiple' value={value} onChange={next => setValue(next ?? [])}>
      <Chip id='a' label='A' />
      <Chip id='b' label='B' />
      <Chip id='c' label='C' />
    </ToggleGroup>
  );
}
```

#### 3\. 控制下+++++++++++

```tsx
import { ToggleGroup, useToggleGroup } from '@cloud-ru/ds-toggles';
import { useState } from 'react';

function Option({ id, label }: { id: string; label: string }) {
  const { isChecked, handleClick } = useToggleGroup({ value: id });
  return (
    <button onClick={handleClick} aria-pressed={isChecked}>
      {label}
    </button>
  );
}

export function ToggleGroupControlled() {
  const [value, setValue] = useState<string | undefined>();
  return (
    <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap', alignItems: 'center' }}>
      <ToggleGroup selectionMode='single' value={value} onChange={setValue}>
        <Option id='s' label='S' />
        <Option id='m' label='M' />
        <Option id='l' label='L' />
      </ToggleGroup>
      <p>Selected: {value ?? '—'}</p>
    </div>
  );
}
```

### 道具

**切换组选项**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `children` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 |  |
| `defaultValue` | `string | string[]` | —— 说 | Начальное |
| `onChange` | `((value: string) => void) | ((value: string[]) => void) | undefined` | —— 说 | 被控制着的.. |
| `selectionMode` | `"multiple"` | `"single"` | `single` | Режим |
| `value` | `string | string[]` | —— 说 | 控制状态 |

## 常见问题

### @cloud-ru/ds-toggles 是什么？

— 复选框, 电台, 切换, 喜欢 → 切换组 → \+ \+ \+ \+ \+ \.

### 如何安装 @cloud-ru/ds-toggles？

在项目目录运行 npm install @cloud-ru/ds-toggles，或使用 pnpm add / yarn add / bun add。

### @cloud-ru/ds-toggles 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @cloud-ru/ds-toggles 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @cloud-ru/ds-toggles 可以商用吗？

@cloud-ru/ds-toggles 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @cloud-ru/ds-toggles 的下载量有多少？

根据 npm 官方下载统计，@cloud-ru/ds-toggles 在 2026/10/10 – 2026/11/08 这 30 天内被下载 13,580 次，日均约 453 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @cloud-ru/ds-toggles 还在维护吗？

最新版本 1\.1\.16 发布于 2026/11/11（今天）；至今共发布 64 个版本，其中过去 12 个月发布了 64 个；首次发布于 2026/08/18。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

