【问题标题】:How to set placeholder for dropdown in react js?如何在 React js 中为下拉菜单设置占位符?
【发布时间】:2017-07-08 01:05:57
【问题描述】:
<select>
     <option selected disabled>Select</option

我添加了一个带有禁用属性的额外选项,但这给了我以下警告:

在 select 上使用 defaultValuevalue 属性而不是设置 selected 选项。

<select>
    {this.props.optionarray.map(function(e){
        return <option 
                   value={e[self.props.unique]} 
                   key={e[self.props.unique]}
               >
                   {e[self.props.name]}
               </option>
    })}
</select>

optionarray 是一个array,它通过props 被映射到每个具有object 的索引上,我也通过props 传递密钥,它也在数组中。一切都在这里工作,它只是向我显示我上面提到的警告。

如何删除它或如何为 react 中的下拉菜单设置一个完美的占位符?

【问题讨论】:

  • 不是reactJs的问题。 HTML 中的下拉菜单没有 placeholder 的概念。您需要添加一个选项作为defaultValue 并在验证期间处理它(如果它被选中)。或者使用onChange 处理程序来修改状态变量并检查它的存在。
  • 是的。 select 的 defaultValue 需要具有所选选项的唯一值。相反,我没有向它传递任何价值。为 select 的值赋予一个状态并更新状态起到了神奇的作用。

标签: reactjs react-redux


【解决方案1】:

原因是,React 通过使用 states 提供了一种更好的控制元素的方法,因此不要使用带有选项的 selected,而是使用 select 的 value 属性并在 state 变量中定义其值,使用onChange方法更新state,这样使用:

class App extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            value: '1'
        };
    }

    render(){
       return(
           <select value={this.state.value} onChange={(e)=>{this.setState({value: e.target.value})}}>
              <option value='1' disabled>Select</option>
              {
                  [2,3,4].map((i,j)=>{
                      return <option key={i} value={i}>{i}</option>
                  })
              }
           </select>
       );
    }
}

如何为下拉菜单设置占位符?

根据Mozilla Dev Networkplaceholder 不是&lt;select&gt; 的有效属性。因此,您可以代替它来呈现default 选项:

&lt;option default&gt;Select&lt;/option&gt;

按照DOC使用密钥

Keys 帮助 React 识别哪些项目已更改、添加或正在更改 删除。键应该给数组内的元素以给出 元素一个稳定的身份。

建议:

每当我们在循环中创建任何ui dynamically 时,我们需要为每个element 分配一个unique 键,以便react 可以轻松识别元素,它基本上用于改进@987654340 @。

检查工作示例:

class App extends React.Component {

constructor(props) {
    super(props);
    this.state = {
        value: '1'
    };
}

render(){
   return(
       <select value={this.state.value} onChange={(e)=>{this.setState({value: e.target.value})}}>
          <option value='1' disabled>Select</option>
          {
              [2,3,4].map((i,j)=>{
                  return <option key={i} value={i}>{i}</option>
              })
          }
       </select>
   );
}
}

ReactDOM.render(<App />, document.getElementById('container'));
<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='container'/>

检查小提琴的工作示例:https://jsfiddle.net/29uk8fn0/

【讨论】:

  • 是的,你没看错,为禁用的选项分配一个唯一的值,如“-1”或“0”,为其他选项分配正确的值。禁用的将是默认的,因此您可以为其分配任何值。
  • 这里的关键是给禁用的选项一个唯一的值。对不起,我错误地删除了我之前的评论。
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2018-03-18
相关资源
最近更新 更多