Pular para o conteúdo principal

Switch

O Switch é um componente de toggle que permite ao usuário alternar entre dois estados (ligado/desligado). É ideal para configurações, preferências e controles de ativação/desativação.

Importação

import { Switch } from '@useblu/ocean-react';

Importação específica (recomendado para tree-shaking)

import { Switch } from '@useblu/ocean-react/Switch';

Importação de tipos TypeScript

import type { SwitchProps } from '@useblu/ocean-react';

// Uso em componente customizado
const MySwitch: React.FC<SwitchProps> = (props) => {
return <Switch {...props} />;
};

Playground Interativo

Explore o componente Switch no playground interativo do Storybook:

Documentação Completa

Para documentação técnica detalhada, exemplos de uso e API completa, consulte o Storybook do Switch.

No Storybook você encontrará:

  • Controles interativos para testar todas as props
  • API gerada automaticamente com tipagem completa
  • Exemplos visuais de todos os estados
  • Playground para experimentação rápida

Uso básico

<Switch id="basic-switch" checked />

Estados

O Switch possui diferentes estados para diferentes contextos de uso:

Estados normais

<div>
<Switch id="switch-on" checked />
<Switch id="switch-off" checked={false} />
</div>

Estados desabilitados

<div>
<Switch id="switch-disabled-on" checked disabled />
<Switch id="switch-disabled-off" checked={false} disabled />
</div>

Estados somente leitura

<div>
<Switch id="switch-readonly-on" checked readOnly />
<Switch id="switch-readonly-off" checked={false} readOnly />
</div>

Uso com formulários

Exemplo básico com estado controlado

function SwitchExample() {
const [isEnabled, setIsEnabled] = React.useState(false);

return (
<div>
<label htmlFor="form-switch">Notificações por email:</label>
<Switch
id="form-switch"
checked={isEnabled}
onChange={(e) => setIsEnabled(e.target.checked)}
/>
<span>{isEnabled ? 'Ativado' : 'Desativado'}</span>
</div>
);
}

<SwitchExample />;

Múltiplos switches em formulário

function MultipleSwitchesExample() {
const [settings, setSettings] = React.useState({
notifications: true,
darkMode: false,
autoSave: true,
});

const handleChange =
(key: string) => (e: React.ChangeEvent<HTMLInputElement>) => {
setSettings((prev) => ({
...prev,
[key]: e.target.checked,
}));
};

return (
<div>
<div>
<label htmlFor="notifications">Notificações</label>
<Switch
id="notifications"
checked={settings.notifications}
onChange={handleChange('notifications')}
/>
</div>

<div>
<label htmlFor="darkMode">Modo escuro</label>
<Switch
id="darkMode"
checked={settings.darkMode}
onChange={handleChange('darkMode')}
/>
</div>

<div>
<label htmlFor="autoSave">Salvamento automático</label>
<Switch
id="autoSave"
checked={settings.autoSave}
onChange={handleChange('autoSave')}
/>
</div>
</div>
);
}

<MultipleSwitchesExample />;

API

Props

PropTipoPadrãoDescrição
checkedbooleanfalseDefine se o switch está ativado
disabledbooleanfalseDesabilita o switch
readOnlybooleanfalseTorna o switch somente leitura
idstring-ID único para associação com label
namestring-Nome do campo para formulários
onChange(event: ChangeEvent<HTMLInputElement>) => void-Função chamada quando o estado muda
classNamestring-Classes CSS adicionais

Eventos

  • onChange: Disparado quando o estado do switch muda
  • onFocus: Disparado quando o switch recebe foco
  • onBlur: Disparado quando o switch perde foco
  • onClick: Disparado quando o switch é clicado

Acessibilidade

  • ✅ Suporte completo a navegação por teclado
  • ✅ Estados de foco visíveis
  • ✅ Atributos ARIA apropriados
  • ✅ Suporte a screen readers
  • ✅ Contraste adequado em todos os estados
TeclaFunção
TabMove o foco para o switch
Space / EnterAlterna o estado do switch

Exemplo com label acessível

<div>
<label htmlFor="accessible-switch">Ativar modo noturno</label>
<Switch id="accessible-switch" checked />
</div>

CSS

Classes globais

Classe CSSDescrição
.ods-switch__rootEstilos aplicados ao elemento raiz (label)
.ods-switchEstilos aplicados ao input checkbox
.ods-switch__sliderEstilos aplicados ao slider visual

Melhores práticas

✅ Faça

  • Use labels descritivos para explicar o que o switch controla
  • Use switches para configurações binárias simples
  • Forneça feedback visual claro sobre o estado atual
  • Use disabled para opções não disponíveis
  • Use readOnly para exibir estado sem permitir mudança

❌ Não faça

  • Não use switches para ações destrutivas
  • Não use switches para múltiplas opções (use checkboxes)
  • Não omita labels ou descrições claras
  • Não use switches para navegação entre páginas
  • Não ignore estados de carregamento em operações assíncronas

Visão geral dos estados

Veja todos os estados do Switch em ação:

Estados desabilitados

Estados somente leitura