有没有办法借助 React 中的功能更改选定的选项?

Is there a way to change selected option with help of function in React?

我有自定义的 radio 按钮和 select,只有少数 options。默认情况下,只有部分选项显示在 select 框中。当我选中任何 radio 按钮时,select 选项将更改为其他一些选项。当我取消选中 radio 按钮时,它们将变回默认的 select 选项。到目前为止一切都很好。但是,如果选项是 selected,然后 radio 按钮再次被选中或取消选中,它将像通常那样更改 select 选项,但它不会显示第一个选项或默认值(第一个选项)。它将显示第二个或第三个取决于之前选择的是哪个。它不会跳回到 "Actions"

{!this.state.isAnySelected ?
  <>
    <select defaultValue="Actions">
      <option>Actions</option>
      <option>Category request</option>
      <option>Add new review</option>
    </select>
  </>
  :
  <>
    <select defaultValue="Actions">
      <option>Actions</option>
      <option>Add new product</option>
      <option>View product</option>
    </select>
  </>
}

每次单击单选按钮时我都尝试更改 defaultValue 但它什么也没做。

是的,您可以在 React 中使用受控表单元素。你需要跟踪 value 道具,传递它而不是 defaultValue 以使其工作。

解决方法在这里

处理此问题的一种方法是向两个 select 元素添加一个 key

{!this.state.isAnySelected ?
  <>
    <select key="categorySelect" defaultValue="Actions">
      <option>Actions</option>
      <option>Category request</option>
      <option>Add new review</option>
    </select>
  </>
  :
  <>
    <select key="productSelect" defaultValue="Actions">
      <option>Actions</option>
      <option>Add new product</option>
      <option>View product</option>
    </select>
  </>
}

这样做的效果是在 this.state.isAnySelected 发生变化时重新挂载 select

当前 this.state.isAnySelected 更改时,React 只会更新现有选项的选项文本,因此当前 selected 索引不受影响。 "defaultValue" 只会影响首次安装元素时 selected 的内容。这两个不同的键导致 React 将它们视为单独的 DOM 元素而不是对现有 DOM 元素的更改,因此每当 this.state.isAnySelected 更改时,先前的 select 将被卸载并另一个安装了正确的默认值。