javascript - 类型错误 : Cannot convert undefined or null to object (referring to Object. 键)

标签 javascript reactjs

因此,代码的前提是根据国家、城市、城镇等创建一个动态下拉框。选定的国家/地区选择将填充该选定国家/地区的关联城市的辅助下拉框,例如示例。

但是我收到了上述错误消息。解决这个问题的最佳方法是什么?

从 '../../common/lib/redux-fields' 导入 { fields } ;

class FieldsPage extends React.Component {

  constructor(props) {
    super(props)

    this.handleFirstLevelChange = this.handleFirstLevelChange.bind(this)
    this.handleSecondLevelChange = this.handleSecondLevelChange.bind(this)

    // Prepopulate with the first item for each level
    this.state = {
      firstLevel: Object.keys(props.options)[0],
      secondLevel: Object.keys(props.options)[0][0]
    }
  }

  handleFirstLevelChange(event) {
    this.setState({firstLevel: event.target.value});
  }

  handleSecondLevelChange(event) {
    this.setState({secondLevel: event.target.value});
  }

  onFormSubmit = () => {
    const { dynamicFields, fields } = this.props;

    const values = {
       ...fields.$values(),
      concepts: {
        ...dynamicFields,
      },
    };
  } 

  render() {

    // Dynamic drop-down box 
    const renderOption = item => <option value={item}>{item}</option>
    const firstLevelOptions = Object.keys(this.props.options).map(renderOption)
    const secondLevelOptions = this.props.options[this.state.firstLevel].map(renderOption)

    return (
      <View>
        <Form onSubmit={this.onFormSubmit}>
          <Block>
            <Select
              {...fields.donation}
              disabled={disabled}
              label="Donation"
              options={[
                { children: 'Two', value: 2 },
                { children: 'Four', value: 4 },
                { children: 'Eight', value: 8 },
                { children: 'Sixteen', value: 16 },
                { children: 'Thirty-Two', value: 32 },
                { children: 'Sixty-Four', value: 64 },
              ]}
            />
          </Block>
          <Block>
            <Select
              onChange={this.handleFirstLevelChange}
              {...fields.handleFirstLevelChange}
              disabled={disabled}
              label="handleFirstLevelChange"
              value={this.state.firstLevel}
            />
          </Block>
          <Block>
            <Select
              onChange={this.handleSecondLevelChange}
              {...fields.handleSecondLevelChange}
              disabled={disabled}
              label="handleSecondLevelChange"
              value={this.state.secondLevel}
            />
          </Block>
          <Button disabled={disabled} type="submit">
            <FormattedMessage {...buttonsMessages.submit} />
          </Button>
        </Form>
      </View>
    );
  }

}

const options = {
  "USA": ["New York", "San Francisco"],
  "Germany": ["Berlin", "Munich"]
}

最佳答案

this.handleFirstLevelChange = this.handleFirstLevelChange.bind(this)
this.handleSecondLevelChange = this.handleSecondLevelChange.bind(this)

在上面两行中,您在正在定义的 this 对象下调用相同的 key。所以 this.handleFirstLevelChange 指向 undefinedbind 方法可在函数的prototype 上使用。所以你会收到此错误无法读取未定义的属性绑定(bind)(this.handleFirstLevelChange)

关于javascript - 类型错误 : Cannot convert undefined or null to object (referring to Object. 键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805020/

相关文章:

javascript - 当所有 <div> 具有相同的类时,如何在单击单选按钮时显示/隐藏一个 <div> ?

javascript - Sequelize : instance. get 不是一个函数

javascript - 我的邮寄路线有问题吗?

javascript - 如何将 kendo.ui.RangeSlider 重置为初始值?

reactjs - React Route 显示空白页

reactjs - React Router v6 - 如何在路由中使用@符号?

javascript - 在 JavaScript 中将字符串高效解析为 float 组

node.js - Stripe 付款方式。使用卡 [split-form] 不起作用。无法获取卡号到期和cvc号

javascript - 为什么 setTimeout 不适用于 React Redux 中的异步操作创建者?

javascript - React setState 来更新对象