You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Radio按钮结合默认选项数组设置组件默认值?

用Map管理状态时为Radio组设置默认值的方案

1. 初始化Map状态

在组件初始化useState时,基于defaultOptions数组为每组Radio设置默认选中值。假设你有3组Radio,分别对应group1、group2、group3,可以这样初始化:

import { useState } from 'react';

const defaultOptions = [
  { label: "Mark", value: "mark" },
  { label: "Steve", value: "steve" },
  { label: "Paul", value: "paul" }
];

const YourComponent = () => {
  // 初始化Map,为每组Radio指定默认选中的value
  const [radioStates, setRadioStates] = useState<Map<string, string>>(
    new Map([
      ["group1", defaultOptions[0].value], // 第一组默认选Mark
      ["group2", defaultOptions[1].value], // 第二组默认选Steve
      ["group3", defaultOptions[2].value]  // 第三组默认选Paul
    ])
  );

  // ...后续代码
};

如果需要所有组默认选中同一个选项(比如都选Mark),只需把所有group的初始值设为defaultOptions[0].value即可。

2. 渲染Radio按钮并绑定状态

遍历defaultOptions生成每组Radio的选项,通过radioStates.get(groupKey)判断当前选项是否被选中,同时绑定 onChange 事件更新Map状态:

// 渲染第一组Radio
<div className="radio-group">
  {defaultOptions.map(option => (
    <label key={option.value} className="radio-label">
      <input
        type="radio"
        name="group1"
        value={option.value}
        // 对比Map中当前组的value,判断是否选中
        checked={radioStates.get("group1") === option.value}
        onChange={(e) => {
          // 创建新Map实例更新状态,避免直接修改原Map导致React不渲染
          const newRadioStates = new Map(radioStates);
          newRadioStates.set("group1", e.target.value);
          setRadioStates(newRadioStates);
        }}
      />
      {option.label}
    </label>
  ))}
</div>

// 同理渲染第二组、第三组,只需把groupKey换成"group2"、"group3",name属性对应修改
<div className="radio-group">
  {defaultOptions.map(option => (
    <label key={option.value} className="radio-label">
      <input
        type="radio"
        name="group2"
        value={option.value}
        checked={radioStates.get("group2") === option.value}
        onChange={(e) => {
          const newRadioStates = new Map(radioStates);
          newRadioStates.set("group2", e.target.value);
          setRadioStates(newRadioStates);
        }}
      />
      {option.label}
    </label>
  ))}
</div>

关键注意点

  • 由于Map是引用类型,更新状态时必须创建新的Map实例(不能直接修改原Map),否则React无法检测到状态变化,不会触发组件重新渲染。
  • Radio的name属性必须同组保持一致,确保同一时间只能选中组内一个选项。

内容的提问来源于stack exchange,提问作者Devmix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:53:18