跳到主要内容

useToggle

在两个值之间切换的 Hook,比 useState 更加便捷和语义化。

基本用法

实时编辑器
function Demo() {
  const [value, toggle] = useToggle('blue', ['blue', 'orange']);

  return (
    <div>
      <Button onClick={() => toggle()}>
        切换颜色
      </Button>
      <div
        style={{
          marginTop: '20px',
          padding: '40px',
          backgroundColor: value,
          color: 'white',
          borderRadius: '8px',
          textAlign: 'center',
          fontWeight: 'bold',
        }}
      >
        当前颜色: {value}
      </div>
    </div>
  );
}
结果
Loading...

设置特定值

可以直接设置为特定的值:

实时编辑器
function Demo() {
  const [value, toggle] = useToggle('left', ['left', 'center', 'right']);

  return (
    <div>
      <Group spacing="md">
        <Button onClick={() => toggle('left')}>左对齐</Button>
        <Button onClick={() => toggle('center')}>居中对齐</Button>
        <Button onClick={() => toggle('right')}>右对齐</Button>
        <Button onClick={() => toggle()}>切换</Button>
      </Group>
      <div style={{ marginTop: '20px', textAlign: value }}>
        当前对齐方式: <strong>{value}</strong>
      </div>
    </div>
  );
}
结果
Loading...

布尔值切换

提供了 useBooleanToggle 专门用于布尔值切换:

实时编辑器
function Demo() {
  const [isActive, toggle] = useBooleanToggle(false);

  return (
    <div>
      <Button onClick={() => toggle()}>切换状态</Button>
      <div
        style={{
          marginTop: '20px',
          padding: '20px',
          backgroundColor: isActive ? 'var(--ifm-color-success-lightest)' : 'var(--ifm-color-emphasis-100)',
          borderRadius: '8px',
          border: `1px solid ${isActive ? 'var(--ifm-color-success)' : 'var(--ifm-color-emphasis-300)'}`,
        }}
      >
        状态: {isActive ? '✓ 激活' : '✗ 未激活'}
      </div>
    </div>
  );
}
结果
Loading...

主题切换示例

实时编辑器
function Demo() {
  const [theme, toggleTheme] = useToggle('light', ['light', 'dark']);

  return (
    <div>
      <Button onClick={() => toggleTheme()}>切换主题</Button>
      <div
        style={{
          marginTop: '20px',
          padding: '30px',
          backgroundColor: theme === 'light' ? '#ffffff' : '#1a1a1a',
          color: theme === 'light' ? '#000000' : '#ffffff',
          borderRadius: '8px',
          border: `1px solid ${theme === 'light' ? '#e0e0e0' : '#333333'}`,
          transition: 'all 0.3s',
        }}
      >
        <h4>当前主题: {theme}</h4>
        <p>这是 {theme === 'light' ? '亮色' : '暗色'} 主题模式</p>
      </div>
    </div>
  );
}
结果
Loading...

API

useToggle

function useToggle<T>(
initialValue: T,
options: [T, T]
): [T, (value?: React.SetStateAction<T>) => void]

参数

参数说明类型默认值
initialValue初始值T-
options可切换的两个值[T, T]-

返回值

返回一个数组,包含当前值和切换函数:

索引说明类型
[0]当前值T
[1]切换函数(value?: React.SetStateAction<T>) => void

useBooleanToggle

function useBooleanToggle(
initialValue?: boolean
): [boolean, (value?: React.SetStateAction<boolean>) => void]

参数

参数说明类型默认值
initialValue初始布尔值booleanfalse

返回值

返回一个数组,包含当前布尔值和切换函数。

使用场景

  • 主题切换: 亮色/暗色主题切换
  • 视图模式: 列表/网格视图切换
  • 语言切换: 中文/英文语言切换
  • 状态切换: 启用/禁用状态切换
  • 对齐方式: 左/右对齐切换