当前位置:首页 > React

react radio实现

2026-01-26 15:18:17React

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

使用原生 HTML 单选按钮

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

react radio实现

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 组件:

react 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 组的状态:

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 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

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 基础页面结构 在…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…