如何在 ReactJS 中更改单选按钮时重置选定的下拉列表

Posted

技术标签:

【中文标题】如何在 ReactJS 中更改单选按钮时重置选定的下拉列表【英文标题】:How to reset selected dropdown on change of radio button in ReactJS 【发布时间】:2021-12-15 01:05:06 【问题描述】:

我有单选按钮,后跟选择下拉菜单。每个单选按钮都与一组与其相关的选项相关联。每当单选按钮更改时,下拉菜单中的选项也应该更改。但是我面临的问题是,如果选项的值相同,则选项不会被重置。

这是数据

const data = [
    
      name: "option1",
      info: [1, 2, 3, 4, 5]
    ,
    
      name: "option2",
      info: [1, 2, 3, 4, 5]
    ,
    
      name: "option3",
      info: [6, 7, 8, 9, 10]
    
  ];

我在这里创建了一个示例链接。 链接(https://codesandbox.io/s/react-hello-world-forked-rnwe2?file=/src/index.js)

这是基于 ReactJS 构建的。

【问题讨论】:

【参考方案1】:

但我面临的问题是,如果 选项的值是相同的。

我假设这意味着您希望在每次更改单选按钮时将下拉菜单重置为第一个索引。现在,DOM 控制着当前选择的内容,因此如果选择了下拉列表中的第 3 项,则 DOM 将存储第 3 项的值已选择。 React 只是在您更改选项时更改每个项目中的值(请参阅reconciliation),它实际上并没有在 DOM 中重新创建 select 节点。

为此,我建议控制 select 元素,例如

import React,  useState  from "react";
import ReactDOM from "react-dom";

function App() 
  const [current, setCurrent] = useState(1);
  const [selected, setSelected] = useState("");
  const data = [
    
      name: "option1",
      info: [1, 2, 3, 4, 5]
    ,
    
      name: "option2",
      info: [1, 2, 3, 4, 5]
    ,
    
      name: "option3",
      info: [6, 7, 8, 9, 10]
    
  ];

  function handleChange(id) 
    setCurrent(id);
    setSelected("");
  

  function handleSelected(event) 
    setSelected(event.target.value);
  

  return (
    <div>
      data.map((item, key) => 
        return (
          <label key=key>
            <input
              type="radio"
              name="test"
              checked=key === current ? true : false
              onChange=(e) => handleChange(key)
              value=key
            />
            item.name
          </label>
        );
      )
      <hr />
      <br />
      <select
        value=selected
        style= width: "100px", padding: 10 
        onChange=handleSelected
      >
        data[current].info.map((item, key) => 
          return <option>item</option>;
        )
      </select>
    </div>
  );


const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

https://codesandbox.io/s/react-hello-world-forked-d9cuh?file=/src/index.js

【讨论】:

以上是关于如何在 ReactJS 中更改单选按钮时重置选定的下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在重置其他两个的文本时更改选中的单选按钮元素上的文本?

如何使选定的单选按钮根据另一个单选按钮更改另一个状态来更改一个状态?

如何按状态值更改选中(选定)单选按钮[重复]

合成:如何根据单选按钮中的选定选项动态更改画布新图纸?

如何在reactjs中更新地图功能中的状态

如何以编程方式更改表格单元格中单选按钮组的单选按钮?