簡體   English   中英

如何使用 react ref 從 html select 元素中獲取值?

[英]How to use react ref to get value from html select element?

我有一個表格,我在其中使用 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元素本身?

您可以將值存儲在更改后的狀態中,以后再使用,即使其成為受控組件

 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這樣獲得值

 class App extends React.Component { constructor() { super(); this.state = {selectValue: ''} } callThis = (e) => { console.log(this.selectVal.value) } render() { return ( <div><select ref={(input) => this.selectVal = input} 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> <input type="button" value="click" onClick={this.callThis}/></div> ) } } 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> 

我會給每個元素一個值和像這樣的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

});

}

如果您使用的是 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

您可以只使用 onChange function 來設置 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM