Javascript 基于另一个字段禁用一个字段';s值

Javascript 基于另一个字段禁用一个字段';s值,javascript,react-native,tcomb,Javascript,React Native,Tcomb,我正在尝试实现一个基本功能,根据另一个字段的值禁用一个字段。以下是代码示例: import React from 'react' import t from "tcomb-form-native"; import {Text, View, TextInput, TouchableHighlight } from 'react-native'; const Form = t.form.Form; var Type = t.struct({ disable: t.Boolean, // if

我正在尝试实现一个基本功能,根据另一个字段的值禁用一个字段。以下是代码示例:

import React from 'react'
import t from "tcomb-form-native";
import {Text, View, TextInput, TouchableHighlight } from 'react-native';

const Form = t.form.Form;

var Type = t.struct({
  disable: t.Boolean, // if true, name field will be disabled
  name: t.String
});

var options = {
  fields: {
    name: {}
  }
};

export default class App extends React.Component {

  constructor(props){
    super(props);
    this.state = {
      options: options,
      value: null
    }
  }

  onChange(value) {
    var newOptions = t.update(this.state.options, {
      fields: {
        name: {
          editable: {'$set': !value.disable}
        }
      }
    });
    this.setState({options: newOptions, value: value});
  }

  onPress() {
    var value = this.refs.form.getValue();
    if (value) {
      console.log(value);
    }
  }

  render() {
    return (
      <View style>
        <Form
          ref="form"
          type={Type}
          options={this.state.options}
          value={this.state.value}
          onChange={this.onChange}
        />
        <TouchableHighlight style onPress={this.onPress} underlayColor='#99d9f4'>
          <Text style>Save</Text>
        </TouchableHighlight>
      </View>
    )
  };

}; 
从“React”导入React
从“tcomb form native”导入t;
从“react native”导入{Text,View,TextInput,TouchableHighlight};
const Form=t.Form.Form;
var Type=t.struct({
disable:t.Boolean,//如果为true,则名称字段将被禁用
姓名:t.String
});
变量选项={
字段:{
名称:{}
}
};
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
此.state={
选项:选项,
值:null
}
}
onChange(值){
var newOptions=t.update(this.state.options{
字段:{
姓名:{
可编辑:{'$set':!value.disable}
}
}
});
this.setState({options:newOptions,value:value});
}
onPress(){
var value=this.refs.form.getValue();
如果(值){
console.log(值);
}
}
render(){
返回(
拯救
)
};
}; 
当我运行给定的代码时,我遇到以下错误
TypeError:undefined不是对象(计算'this.state.options')
。 这是一个非常基本的例子,因为我还是一个新手,我正在努力理解这个代码示例是如何工作的。 感谢您的帮助。
谢谢。

es6类不会自动绑定,如果您使用属性初始值设定项,它会将此范围限定到您的类:

onChange = (value) => {
  //
}

您定义了两次
选项。在
onChange
方法中更改
选项
变量名。不确定这是否能解决您的问题,但无论如何,这是一种糟糕的做法。我刚刚尝试在
onChange
函数中更改
选项
变量名,可惜没有成功。无论如何,谢谢你的回答。