使用React获取提交时的选择选项值

时间:2016-11-28 12:03:12

标签: javascript reactjs

当我点击提交按钮时,获取select选项的vaule的最佳方法是什么?

我是否还需要在select选项中添加onChange?

var UIPrintChart = React.createClass({
    getInitialState: function () {
        return {
            value: 'PNG'
        }
    },
    handlePrint(event) {
        if (this.state.value == 'PNG') {
            console.log('Hello PNG');
        }
        if (this.state.value == 'JPEG') {
            console.log('Hello JPEG');
        }
        if (this.state.value == 'PDF') {
            console.log('Hello PDF');
        }
        if (this.state.value == 'SVG') {
            console.log('Hello SVG');
        }
    },
    render() {
        return (
            <div>
                <select>
                    <option value="PNG">PNG Image</option>
                    <option value="JPEG">JPEG Image</option>
                    <option value="PDF">PDF Document</option>
                    <option value="SVG">SVG Vector Image</option>
                </select>
                <button className="uk-button uk-button-mini" onClick={this.handlePrint}>Export Chart</button> 
            </div>
            )
    }
});

3 个答案:

答案 0 :(得分:7)

是的,您必须为.right p:not(:nth-child(4)){ background:yellow; } 元素添加onChange处理程序。 Leo为您提供了答案,但可能并非最佳,因为每次事件触发时,都会创建一个新的回调。虽然在规模上你的应用程序可能不需要这种级别的优化。无论如何,我可能会重写从React.Component类扩展的东西:

select

我还简化了你的import React from 'react'; class UIPrintChart extends React.Component { constructor(props) { super(props); this.state = { value: 'PNG' }; this.handleChange = this.handleChange.bind(this); this.handlePrint = this.handlePrint.bind(this); } handlePrint() { if (this.state.value) { console.log(this.state.value); } } handleChange(e) { this.setState({ value: e.target.value }); } render() { return ( <div> <select onChange={this.handleChange}> <option value="PNG">PNG Image</option> <option value="JPEG">JPEG Image</option> <option value="PDF">PDF Document</option> <option value="SVG">SVG Vector Image</option> </select> <button className="uk-button uk-button-mini" onClick={this.handlePrint}>Export Chart</button> </div ); } } export default UIPrintChart; 功能,但你可以实现这个但是你喜欢:)希望这会有所帮助!

答案 1 :(得分:6)

  

我是否还需要在select选项中添加onChange?

,就像这样:

 <select onChange={(e) => this.setState({ value: e.target.value })}>
    <option value="PNG">PNG Image</option>
    <option value="JPEG">JPEG Image</option>
    <option value="PDF">PDF Document</option>
    <option value="SVG">SVG Vector Image</option>
 </select>

答案 2 :(得分:2)

我建议使用ref而不是state。

<select ref="imageType">
  <option value="PNG">PNG Image</option>
  <option value="JPEG">JPEG Image</option>
  <option value="PDF">PDF Document</option>
  <option value="SVG">SVG Vector Image</option>
</select>

handlePrint() {
  if (this.refs.imageType) {
    console.log(this.refs.imageType.value);
  }
}