当前位置:首页 > 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 项目依赖 打开项目根目录下的 package.json 文件,删除所有包含 react、react-dom 或其他 React 相关库的依赖项。保存文件后运行以下命令: npm u…

react如何鉴定

react如何鉴定

React 鉴权方法 基于路由的鉴权 在 React 中,可以通过封装路由组件实现鉴权。使用 react-router-dom 检查用户是否登录,未登录则跳转至登录页。 import { Rou…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

vue实现radio

vue实现radio

Vue 实现 Radio 单选按钮 在 Vue 中实现 Radio 单选按钮可以通过 v-model 绑定数据,结合原生 HTML 的 <input type="radio"> 或使用第三…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…