当前位置:首页 > React

react radio实现

2026-01-26 15:18:17React

实现 React 单选按钮(Radio)的方法

使用原生 HTML 单选按钮

在 React 中可以直接使用 HTML 的原生单选按钮,通过 checkedonChange 属性控制状态:

import React, { useState } from 'react';

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

  const handleChange = (event) => {
    setSelectedOption(event.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>
  );
}

使用第三方库(如 Material-UI)

对于更复杂的 UI 需求,可以使用 Material-UI 的 Radio 组件:

import React, { useState } from 'react';
import Radio from '@mui/material/Radio';
import RadioGroup from '@mui/material/RadioGroup';
import FormControlLabel from '@mui/material/FormControlLabel';
import FormControl from '@mui/material/FormControl';

function MaterialRadioExample() {
  const [value, setValue] = useState('female');

  const handleChange = (event) => {
    setValue(event.target.value);
  };

  return (
    <FormControl>
      <RadioGroup
        aria-label="gender"
        name="controlled-radio-buttons-group"
        value={value}
        onChange={handleChange}
      >
        <FormControlLabel value="female" control={<Radio />} label="Female" />
        <FormControlLabel value="male" control={<Radio />} label="Male" />
      </RadioGroup>
    </FormControl>
  );
}

自定义 Radio 组件

可以创建自定义的 Radio 组件以实现特定样式或功能:

import React, { useState } from 'react';

function CustomRadio({ label, value, checked, onChange }) {
  return (
    <label>
      <input
        type="radio"
        value={value}
        checked={checked}
        onChange={onChange}
        style={{ marginRight: '8px' }}
      />
      {label}
    </label>
  );
}

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

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

使用 Context API 管理 Radio 组状态

对于更复杂的场景,可以使用 Context API 来管理 Radio 组的状态:

react radio实现

import React, { createContext, useContext, useState } from 'react';

const RadioContext = createContext();

function RadioGroup({ children, onChange }) {
  const [value, setValue] = useState(null);

  const handleChange = (newValue) => {
    setValue(newValue);
    onChange(newValue);
  };

  return (
    <RadioContext.Provider value={{ value, handleChange }}>
      <div>{children}</div>
    </RadioContext.Provider>
  );
}

function RadioOption({ value, children }) {
  const { value: selectedValue, handleChange } = useContext(RadioContext);

  return (
    <label>
      <input
        type="radio"
        checked={selectedValue === value}
        onChange={() => handleChange(value)}
      />
      {children}
    </label>
  );
}

function ContextRadioExample() {
  return (
    <RadioGroup onChange={(value) => console.log('Selected:', value)}>
      <RadioOption value="apple">Apple</RadioOption>
      <RadioOption value="orange">Orange</RadioOption>
    </RadioGroup>
  );
}

关键注意事项

  • 始终使用受控组件模式管理 Radio 的状态
  • 确保每个 Radio 组中的 name 属性相同(原生 HTML 方式)
  • 为无障碍访问添加适当的 aria-* 属性
  • 使用 label 元素包裹或关联单选按钮以提高可用性
  • 考虑使用字段集(fieldset)和图例(legend)来组织相关单选按钮

以上方法涵盖了从简单到复杂的各种实现场景,可以根据项目需求选择合适的方案。

标签: reactradio
分享给朋友:

相关文章

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…

react项目如何启动

react项目如何启动

启动React项目的步骤 确保已安装Node.js(建议版本12以上)和npm/yarn。可通过以下命令检查版本: node -v npm -v 全局安装create-react-app脚手架工具(…

webstorm如何运行react

webstorm如何运行react

运行 React 项目的方法 在 WebStorm 中运行 React 项目需要确保项目已正确配置,并且依赖项已安装。以下是具体操作步骤: 确保项目依赖已安装 打开终端(Terminal),导航到项…

react如何用echarts

react如何用echarts

在React中使用ECharts 安装ECharts和React专用封装库: npm install echarts echarts-for-react 基础使用示例 创建一个基础的柱状图组件:…

react 如何引用slider

react 如何引用slider

使用 React 实现 Slider 组件 在 React 中实现 Slider 功能可以通过原生 HTML 的 <input type="range"> 或第三方库(如 react-sl…