如何使用react ref从html select元素中获取值?

bweufnob  于 2023-01-24  发布在  React
关注(0)|答案(4)|浏览(240)

我有一个使用html select元素的表单。

<select className="form-control" id="ntype" required >
      <option value = "">None</option>
      <option value = "1">1</option>
      <option value = "2">2</option>
      <option value = "3">3</option>
  </select>

我知道使用html input类型元素,我们可以像下面的代码那样附加ref

ref = {(input) => { this.nHeading = input; }}

以及

<input
    type        = "text"
    className   = "form-control"
    id          = "tInput"
    placeholder = "Sample input"
    ref         = {(input) => { this.sInput = input; }}
    required
/>

如何将ref附加到<Select>元素,并在提交表单时从附加的ref中获得选定的option value
是否需要将ref附加到每个选项或select元素本身?

yeotifhr

yeotifhr1#

您可以在更改时将值存储在某个状态中,并在以后使用,即使其成为受控组件

class App extends React.Component {
constructor() {
super();
    this.state = {selectValue: ''}
    }
    callThis = (e) => {
        this.setState({selectValue: e.target.value}, ()=> {console.log(this.state.selectValue)});
        
    }
    render() {
    
      return (
          <select onChange={this.callThis}className="form-control" id="ntype" required >
              <option value = "">None</option>
              <option value = "1">1</option>
              <option value = "2">2</option>
              <option value = "3">3</option>
          </select>
         
      )
    }
}
ReactDOM.render(<App/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

或者,您可以使用refs来获取如下所示的值
一个二个一个一个

ruarlubt

ruarlubt2#

我将为每个元素指定一个值,并为select元素指定onChange处理程序,如下所示

<select className="form-control"onChange={this.onChange.bind(this)}>
    <option value="">None</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

并定义一个设置选择状态的onChange处理程序

onChange(e){
    this.setState({value: e.target.value}, function(){

    // do other stuff

});

}

zazmityj

zazmityj3#

如果使用React功能组件,则可以执行以下操作。

import { useState, useRef } from 'react';

...

  const selectRef = useRef(null)
  <select className="form-control" id="ntype" required ref={selectRef}>
      <option value = "">None</option>
      <option value = "1">1</option>
      <option value = "2">2</option>
      <option value = "3">3</option>
  </select>

那么您可以通过以下方式访问提交逻辑中的值:
selectRef.current.value

xggvc2p6

xggvc2p64#

您可以只使用onChange函数来设置Ref的值。例如:

<select className="form-control" id="ntype" required onChange={e => {yourRef.current = e.target.value}} >
      <option value = "">None</option>
      <option value = "1">1</option>
      <option value = "2">2</option>
      <option value = "3">3</option>
  </select>

相关问题