ReactJS:从没有 onChange 事件的props中选择默认值?

IT技术 javascript reactjs
2021-05-03 14:36:16

所以,我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序?

我有一个props传递了我想要选择的选项的默认值。如果我有:

<select 
  value={this.props.defaultValue}
>
  <option value="a">A</option>
  <option value="b">B</option>
</select>

除此之外,它是静态的,因为我相信您对错误很熟悉:

Warning: Failed form propType: You provided a `value` prop to a form field without an `onChange` handler. 
This will render a read-only field.

当我使用 Jquery 获取值时,我不需要状态或子级和父级之间的任何传递......

有没有一种简单的方法可以让 select 从 props 获取默认值,并且仍然作为普通选择运行,其中更改选项会更改我可以用 jquery 获取的值,或者我是否必须有一个状态和一个 onChange 处理程序?

谢谢!

我已经尝试过的:

<select
  defaultValue={this.props.defaultValue} // just returns the first option
> 
  <options etc.>
</select>

另外,我宁愿不使用像 React-Select 这样的外部包......我只想有一个默认值和一个普通的选择......

2个回答

正如@julien 提到的,您可以使用 ref 而不是 JQuery 来获取不受控制的组件中选择的当前值:

class MySelect extends React.Component {
  constructor(props) {
    super(props);
    this.state = { currentValue: this.props.defaultValue };
  }

  updateValue() {
    this.setState({ currentValue: this.refs.myselect.value });
  }

  render () {
    return (
      <div>
        <div>
          <button className="current" onClick={this.updateValue.bind(this)}>{this.state.currentValue}</button>
        </div>

        <select ref="myselect" defaultValue={this.props.defaultValue}>
          <option value="a">A</option>
          <option value="b">B</option>
          <option value="c">C</option>
        </select>
      </div>
    );
  }
}

对于另一部分,defaultValue应该像您尝试的那样工作。

检查这个示例小提琴:https : //jsfiddle.net/y64gbhf8/1/

你可以试试不受控制的组件

您不需要为状态更新编写事件处理程序,DOM 会处理它,然后您可以使用 ref 从 DOM 获取表单值