开发者问题收集

检索下拉列表中选定元素的值 - ReactJS

2020-01-31
87

我是 React 的新手,正在尝试了解绑定和事件。我创建了一个学习项目,并希望在 onChange 上验证下拉菜单。如果未从下拉菜单中选择任何值,则显示错误消息。

注意:我正在使用一个自定义库,该库具有 SelectField 组件的 inValid 和 error 属性。如果 inValid 设置为 true,它将触发错误消息。

我尝试在多个来源上寻找解决方案,并尝试解决这个问题几个小时。请看一下。提前致谢。

WeatherOptionsView.js

class WeatherOptionsView extends React.Component {
  constructor(props) {
    super(props);
    this.state = { reasonState: false, selectValue: null };
  }

  validateState(event) {
    if(!! event.target.selectValue ) {
      this.setState({reasonState: true});
    } 
  }

  render() {
    const cx = classNames.bind(styles);

    return (
      <ContentContainer fill>
        <Spacer marginTop="none" marginBottom="large+1" marginLeft="none" marginRight="none" paddingTop="large+2" paddingBottom="none" paddingLeft="large+2" paddingRight="large+2">
          <Fieldset legend="City">
            <Grid>
              <Grid.Row>
                <Grid.Column tiny={3}>
                    <SelectField selectId="city" required placeholder="Select" label={["City:"]} error={["Error message"]} onChange={this.validateState.bind(this)} isInvalid={this.state.reasonState} value={this.state.selectValue}>
                      <Select.Option value="City1" display="City1" />
                      <Select.Option value="City2" display="City2" />
                    </SelectField>
                </Grid.Column>
              </Grid.Row>
             </Grid>
        )}
        />
      </ContentContainer>
    );
  }
}

export default injectIntl(WeatherOptionsView);

未捕获的 TypeError:无法读取未定义的属性“selectValue”

2个回答

您的问题不在于绑定,而在于您的 validateState 实现。您期待的是 event ,但 SelectField 组件可能正在传递值。该值没有您想要的目标属性。请尝试以下方法:

handleChange(value) {
    this.setState({selectValue: value, reasonState: !value});
}

// and then in the render: 

<SelectField onChange={this.handleChange.bind(this)}>
    {/* ... */}
</SelectField>
Zoran
2020-01-31

正如它所说的 Uncaught TypeError: Cannot read property 'selectValue' of undefined ,event.target 值未定义。此外,您必须在本地状态 onChange 中设置 selectValue 以发送值 prop。

PK07
2020-01-31