2016-08-27 43 views
1

我正嘗試使用tcomb-form-native組件在React-Native中構建一個簡單的登錄表單。我已經創建了方法handleChange,用於將值設置爲初始狀態以及用於提交的handleForm。現在,當我在輸入字段中輸入內容時,內容被刪除並用佔位符(無控制檯輸出)替換,當我按提交按鈕時,出現錯誤「未定義不是對象(評估此.refs.form)」。有沒有更好的方法來做到這一點?React-Native:無法從表單值設置狀態

這是我如何導入和設置的一切:

import React, { Component } from 'react'; 

import { 
    Text, 
    View, 
    StyleSheet, 
    TextInput, 
    TouchableHighlight, 
    ActivityIndicator, 
    Image 
} from 'react-native'; 

var t = require('tcomb-form-native'); 

var Form = t.form.Form; 

var User = t.struct({ 
    username: t.String, 
    password: t.String 
}); 

var options = { 
    auto: 'placeholders', 
    fields: { 
    password: { 
     password: true 
    } 
    } 
}; 

這裏是我的類和方法:

class Login extends Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     value: { 
      username: '', 
      password: '' 
     }, 
     isLoading: false, 
     error: false 
    }; 
    this.handleChange.bind(this); 
} 
handleChange(value) { 
    this.setState({value}); 
} 
handleSubmit() { 
    var value = this.refs.form.getValue(); 
    //update the indicator spinner 
    this.setState({ 
     isLoading: true 
    }); 
    console.log(value); 
} 

這該是多麼即時渲染的一切:

render() { 
    return (
     <View style={styles.mainContainer}> 
      <View style={styles.logo}> 
       <Image source={require('../icon.png')} /> 
      </View> 
      <Text style={styles.title}>Login</Text> 
      <Form 
       ref={(f) => this.form = f} 
       type={User} 
       options={options} 
       onChangeText={(value) => this.setState({value})} 
       value={this.state.value} 
      /> 
      <TouchableHighlight 
       style={styles.button} 
       onPress={this.handleSubmit} 
       underlayColor="white"> 
        <Text style={styles.buttonText}>LOGIN</Text> 
      </TouchableHighlight> 
     </View> 
    ); 
} 

回答

2

Don't Use Bind When Passing Props

那麼你可以做這樣的

onPress={this.handleSubmit} 

handleSubmit =() => {...} 
+0

非常感謝您的回答,但不幸的是我不能測試它尚未因爲我不能設法解決handleChange,此刻一切即時添加輸入字段會自動刪除,並顯示佔位符...我試圖從上面使用相同的原則,但不看它做到了。 – NinetyHH

+0

告訴我完整文件 – stereodenis

+0

我修改了上面的代碼並添加了最後的修改。看起來它不再刪除它們,但我的模擬器現在停止工作,所以我還沒有一個控制檯來測試它。 – NinetyHH