Uncaught TypeError: Cannot read properties of null (reading 'value')

Uncaught TypeError: Cannot read properties of null (reading 'value')

我一直在研究呈现下拉菜单的 react-select 组件(如下图所示)。默认情况下,它 select 是下拉列表中的值,即使我没有 select 编辑它。

Here is the Dropdown menu picture it renders and it selects 60 minutes value

import React from 'react';
import { uniqueId } from 'lodash';
import Select from 'react-select';
import LabelWrapper from '../LabelWrapper';
import AlertWrapper from '../AlertWrapper';

const styles = require('./styles.module.scss');

type Props = {
  multi: boolean;
  options: Array<{ label: string; value: string }>;
  onChange: (selectElementValue: { label: string; value: string }) => {};
  onBlur: () => {};
  value: { value: string, label: string};
  error: string;
  placeholder: string;
  label: string;
  horizontalLabel: boolean;
  required?: boolean;
};

class CreatableSelect extends React.Component<Props, {}> {
  inputId: string;

  constructor(props) {
    super(props);
    this.inputId = uniqueId('id_');
  }

  render() {
    const disabled = this.props.options.length === 0;

    return (
      <LabelWrapper
        forId={this.inputId}
        error={!!this.props.error}
        label={this.props.label}
        horizontal={this.props.horizontalLabel}
        required={this.props.required}
      >
        <AlertWrapper>
          <Select.Creatable
            multi={this.props.multi}
            options={this.props.options}
            onChange={e => this.props.onChange(e.value)}
            disabled={disabled}
            placeholder={this.props.placeholder}
            className={this.props.error ? styles.hasError : null}
            onBlur={this.props.onBlur}
            value={this.props.value}
            inputProps={{ id: this.inputId }}
          />
        </AlertWrapper>
        {this.props.error && (
          <span className="help-block">{this.props.error}</span>
        )}
      </LabelWrapper>
    );
  }
}

export { CreatableSelect };

但是,我想从下拉列表中清除值,但是它在控制台中给我错误:

Uncaught TypeError: Cannot read properties of null (reading 'value')

我的代码可能出了什么问题?

来自 react-select docs,这里是 onChange 事件的第一个参数,newValue

newValue: IsMulti extends true ? ReadonlyArray<Option> : SingleValue One of<null, Option>

因此,newValue 可能是 null。您必须执行 null 检查或使用任何其他允许您这样做的语法。

对于习惯于直接在 select 上使用 onChange 的人来说,API 可能不直观,但他们已经选择了它,如果你想使用它。

您可以做什么的一些示例:

  1. e && e.value
  2. e?.value
  3. e && this.props.onChange(e.value)

并且您可能想将事件处理程序上的参数名称更改为 newValue 或其他名称。