处理 React Hooks 中的选择选项

Posted

技术标签:

【中文标题】处理 React Hooks 中的选择选项【英文标题】:handling select options in React Hooks 【发布时间】:2020-01-26 14:49:28 【问题描述】:

我正在尝试使用 React Hooks 中的 [useState 从下拉选择中获取文本值。我只得到值(数字)而不是文本。 我已经复制了下面控制选择下拉列表的代码位。我在这里想念什么? 谢谢。

const [addrtype, setAddrType] = useState('Home')

function handleAddrTypeChange(e) 
    setAddrType(e.target.value);
    console.log(addrtype)



                            <select
                                defaultValue=addrtype
                                onChange=handleAddrTypeChange
                                className="browser-default custom-select">
                                <option selected value="1">Home</option>
                                <option value="2">Marketing</option>
                                <option value="3">Work</option>
                                <option value="3">Head Office</option>
                            </select>

【问题讨论】:

【参考方案1】:

如果您想要文本,则访问文本而不是值。 event.target.text。 检查参考here。 http://output.jsbin.com/vumune/4/

【讨论】:

当我更改为 setAddrType(e.target.text); console.log(addrtype.text) 我得到 undefined and Uncaught TypeError: Cannot read property 'text' of undefined 检查了您的示例。现在正在处理这个。谢谢。函数 handleAddrTypeChange(e) var id = e.target.selectedIndex; setAddrType(e.target[id].text); console.log(addrtype) 为什么最初的选择是空白的,然后任何其他选择都在 console.log 后面? @Srigar【参考方案2】:
import React,  useState, Component  from 'react';
import  render  from 'react-dom';
import Hello from './Hello';
import './style.css';

const App = () => 

  const [addrtype, setAddrtype] = useState(["Work", "Home", "school"])
  const Add = addrtype.map(Add => Add
  )
  const handleAddrTypeChange = (e) => console.log((addrtype[e.target.value]))

  return (
    < select
      onChange=e => handleAddrTypeChange(e)
      className="browser-default custom-select" >
      
        Add.map((address, key) => <option value=key>address</option>)
      
    </select >)




render(<App />, document.getElementById('root'));

Working example

https://stackblitz.com/edit/react-select-hook

【讨论】:

谢谢,但我在示例中得到“未定义密钥”。 stackblitz.com/edit/react-select-hook - 请再看这里【参考方案3】:

只需更改选项值

<option selected value="Home">Home</option>
<option value="Marketing">Marketing</option>
<option value="Work">Work</option>
<option value="Head Office">Head Office</option>

【讨论】:

OP 需要文本但不需要值。我相信他有充分的理由使用价值数字。您的建议没有解决问题。【参考方案4】:
const [name, setName] = useState("");

const [email, setEmail] = useState("");

const [addrtype, setAddrtype] = useState(["Normal", "Admin"])

const Add = addrtype.map(Add => Add)

const handleAddrTypeChange = (e) =>  
          console.clear(); 
          console.log((addrtype[e.target.value])); 
          setRole(addrtype[e.target.value]) 
            

const [role, setRole] = useState('Normal')


 const handleSubmit = (event) => 
    event.preventDefault();
    console.log
     (`
      Name: $name
      Email: $email 
      Role: $role           
    `);

    ;


    const UserForm = (
    <form onSubmit=handleSubmit>
        <label htmlFor="name">Name</label>
        <input
            value=name
            placeholder="Name"
            required
            onChange=(event) => setName(event.target.value)
        ></input>

        <label htmlFor="email">Email</label>
        <input
            value=email
            placeholder="Email"
            required
            onChange=(event) => setEmail(event.target.value)
        ></input>

        <label for="role">Choose a Role:</label>
        < select
            onChange=e => handleAddrTypeChange(e)
            className="browser-default custom-select" >
            
                Add.map((address, key) => <option key=key value=key>address 
                   </option>)
            
        </select >


        <div class="wrapper">
            <button type="submit" className="button">Create User</button>
        </div>
    </form >

【讨论】:

以上是关于处理 React Hooks 中的选择选项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React Hooks 在地图函数内动态和有条件地呈现选择选项

React Hooks-处理异步api调用

@apollo/react-hooks 中的 `useSubscription` 方法加载卡住

React Hooks 中的闭包问题

React Hooks 中的闭包问题

react-apollo-hooks 中的 useMutation 没有传递变量