当前位置:首页 > React

react 单选实现

2026-01-26 14:22:12React

实现 React 单选功能

在 React 中实现单选功能可以通过多种方式完成,以下是常见的几种方法:

使用受控组件(Controlled Component)

通过状态管理单选按钮的选中状态,适合表单场景:

import { useState } from 'react';

function RadioGroup() {
  const [selectedOption, setSelectedOption] = useState('option1');

  const handleChange = (e) => {
    setSelectedOption(e.target.value);
  };

  return (
    <div>
      <label>
        <input
          type="radio"
          value="option1"
          checked={selectedOption === 'option1'}
          onChange={handleChange}
        />
        Option 1
      </label>
      <label>
        <input
          type="radio"
          value="option2"
          checked={selectedOption === 'option2'}
          onChange={handleChange}
        />
        Option 2
      </label>
    </div>
  );
}

使用非受控组件(Uncontrolled Component)

利用 HTML 原生 radio 的互斥特性,适合简单场景:

function RadioGroup() {
  return (
    <div>
      <label>
        <input type="radio" name="options" value="option1" defaultChecked />
        Option 1
      </label>
      <label>
        <input type="radio" name="options" value="option2" />
        Option 2
      </label>
    </div>
  );
}

使用第三方库

对于复杂场景,可以使用如 react-radio-group 等专门库:

import { RadioGroup, Radio } from 'react-radio-group';

function MyRadioGroup() {
  const [value, setValue] = useState('apple');

  return (
    <RadioGroup name="fruits" selectedValue={value} onChange={setValue}>
      <Radio value="apple" /> Apple
      <Radio value="orange" /> Orange
    </RadioGroup>
  );
}

自定义 Radio 组件

创建可复用的自定义 Radio 组件:

function CustomRadio({ value, checked, onChange, children }) {
  return (
    <label>
      <input
        type="radio"
        value={value}
        checked={checked}
        onChange={onChange}
      />
      {children}
    </label>
  );
}

function RadioGroup() {
  const [selected, setSelected] = useState('A');

  return (
    <div>
      <CustomRadio 
        value="A" 
        checked={selected === 'A'}
        onChange={() => setSelected('A')}
      >
        Option A
      </CustomRadio>
      <CustomRadio 
        value="B" 
        checked={selected === 'B'}
        onChange={() => setSelected('B')}
      >
        Option B
      </CustomRadio>
    </div>
  );
}

样式优化技巧

为单选按钮添加自定义样式时,常用的 CSS 方案:

/* 隐藏原生 radio 用伪元素自定义样式 */
input[type="radio"] {
  opacity: 0;
  position: absolute;
}

input[type="radio"] + label::before {
  content: "";
  display: inline-block;
  width: 16px;
  height: 16px;
  margin-right: 8px;
  border: 2px solid #ccc;
  border-radius: 50%;
  vertical-align: middle;
}

input[type="radio"]:checked + label::before {
  background-color: #007bff;
  border-color: #007bff;
}

无障碍访问建议

确保单选组符合 WAI-ARIA 规范:

react 单选实现

<fieldset>
  <legend>选择性别</legend>
  <div role="radiogroup">
    <input id="male" type="radio" name="gender" value="male" />
    <label htmlFor="male">男性</label>
    <input id="female" type="radio" name="gender" value="female" />
    <label htmlFor="female">女性</label>
  </div>
</fieldset>

标签: 单选react
分享给朋友:

相关文章

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

react详情如何展示

react详情如何展示

React 详情展示的实现方法 在 React 中展示详情内容可以通过多种方式实现,具体取决于应用场景和需求。以下是几种常见的实现方案: 条件渲染 利用状态管理控制详情内容的显示与隐藏。通过点击事件…