新手求助关于TextInput不输入报错



  • var regPage = React.createClass({
    Change(text) {
    RCTDeviceEventEmitter.emit('mail',text);
    },
    <TextInput onChangeText={(text) => this.Change(text)} text={this.state.text} style={styles.input}/>

    componentDidMount(){
    RCTDeviceEventEmitter.addListener('mail',function(text){
    this.setState({
    mail :text
    })
    });

    这样写获取输入的数值,如果有输入的话是正常并能成功获取的,但是如果不输入直接alert的话就会报错null is not an object(evaluating'this.state.mail')



  • 为什么不直接
    <TextInput onChangeText={(text) => this.setState({
    mail :text
    })} text={this.state.mail} style={styles.input}/>



  • 不知为何这样写的话直接整页都报错了, null is not an object(evaluating'this.state.mail')


  • administrators

    不输入就没有初始值啊 你设一个初始值就行了



  • @sunnylqm
    试过设初始值,但是结果一样
    <TextInput onChangeText={(text) => this.Change(text)} text={this.state.text} defaultValue=“0” style={styles.input}/>



  • @Kevin
    不知为何这样写的话直接整页都报错了, null is not an object(evaluating'this.state.mail')


  • administrators

    @wowaji state的初始值 不是defaultValue



  • getInitialState() {
    return {
    mail:''
    }
    }

    ...

    <TextInput onChangeText={(text) => this.setState({
    mail :text
    })} text={this.state.mail} style={styles.input}/>



  • @Kevin ES6/7的写法 初始值这么设定:

    class Foo extends React.Component {
      state = {
        mail: '',
      };
    }
    

    getInitialState是无效的。参见博客区的ES6,ES7对照贴



  • @tdzl2003 但他的源码中并不是用的ES6/7语法。还是var regPage = React.createClass({
    Change(text) {
    RCTDeviceEventEmitter.emit('mail',text);
    },........



  • @Kevin
    其实我也是刚接触RN,是我的语法错了?



  • @wowaji 是ES5的语法,如果使用最新的ES6/7语法,则大概结构是:

    class regPage extends Component {
    constructor(props) {
    super(props);
    this.state = {
    mail: ''
    };
    }
    render(){
    }
    }



  • @Kevin
    此法有效,谢谢~


登录后回复