0
我是React Native的新手,我試圖實現一個簡單的登錄表單。在子組件中使用TextInput創建登錄表單
我嘗試以下第一,它的工作原理:
import React, { Component } from 'react';
import {
View,
Text,
TextInput,
StyleSheet,
} from 'react-native';
import TitledInput from './login-form';
export default class LoginForm extends Component {
constructor(props) {
super(props);
this.state = { email: '', password: ''};
}
render() {
return (
<View style={styles.container}>
<TextInput
label='Email Adress'
placeholder='[email protected]'
value={this.state.email}
onChangeText={(email) => this.setState({email})}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
});
然後我就想叫TitledInput
另一個獨立的部件拆分輸入和嘗試這種(不工作):
LoginForm的
import React, { Component } from 'react';
import {
View,
Text,
StyleSheet,
} from 'react-native';
import TitledInput from './login-form';
export default class LoginForm extends Component {
constructor(props) {
super(props);
this.state = { email: '', password: ''};
}
render() {
return (
<View style={styles.container}>
<TitledInput
label='Email Adress'
placeholder='[email protected]'
value={this.state.email}
onChangeText={(email) => this.setState({email})}
/>
</View>
);
}
}
標題輸入
import React, { Component } from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';
export default class TitledInput extends Component {
const { inputStyle, labelStyle, containerStyle } = styles;
render() {
return (
<View style={container}>
<Text style={label}>{props.label.toUpperCase()}</Text>
<TextInput
autoCorrect={false}
placeholder={props.placeholder}
secureTextEntry={props.secureTextEntry}
value={props.value}
onChangeText={props.onChangeText}
style={input}
/>
</View>
);
}
}
我收到一個'maximum call stack exceeded'
錯誤。
我可以在互聯網上看到,當在re-render
函數中調用setState
時會發生此錯誤......但我不知道如何處理這種情況,我希望登錄表單知道其輸入孩子的值零件。
我想知道它是因爲我在點擊提交按鈕時使用它,還是它是整個國家的目的?
的數量仍然得到同樣的錯誤... –
看來你的設備不能處理太多的函數調用。所以使用onchangetext使用onBlur –
請參閱此問題https://github.com/facebook/react-native/issues/14051但仍未解決 –