React Native Custom TextInput 对象在每个字符后失去焦点
React Native Custom TextInput object losing focus after each character
我在输入字符后 TextInput 失去焦点时遇到问题。它只发生在我的自定义 TextInput 对象中。键入每个字符后,键盘将消失,我必须重新选择对象才能取回键盘。
我在 Android phone 上只有 运行 这个代码。我不确定 iOS 是如何工作的。
我浏览了本网站和其他网站上的许多话题,但找不到任何可以保持专注的话题。
在下面的代码中,我包含了 2 个 TextInput 对象。一个是我的自定义对象 MyTextInput。另一个是通用的 TextInput 对象。当在通用中输入文本时,一个焦点不会丢失,键盘也不会消失。在习惯中,一个焦点丢失,键盘消失。
如有任何帮助,我们将不胜感激。
import React, { Component , useState} from 'react';
import {
View,
Text,
TextInput,
Button,
StyleSheet,
} from 'react-native';
const Form = () => {
const [values, setValues] = useState({ email: "", a: ""});
const MyTextInput = ({ valueVar, name, type, onChange }) => {
return (
<TextInput
style={styles.textInputStyle}
value={valueVar}
onChangeText={text => onChange({ name, type, text })}
/>
);
};
const handleChange = (event) => {
const {name, type, text} = event;
setValues({...values, [name]: text})
}
const handleChangeTI = (text) => {
setValues({...values, a: text})
}
return (
<View style={styles.containerStyle}>
<View>
<Text style={styles.textStyle}>email </Text>
<MyTextInput
name="email"
type="text"
valueVar={values.email}
onChange={handleChange}
>
</MyTextInput>
</View>
<View>
<Text style={styles.textStyle}>TextInput</Text>
<TextInput
style={styles.textInputStyle}
value={values.a}
onChangeText={handleChangeTI}
/>
</View>
</View>
); // return
}; // const
export default Form;
const styles = StyleSheet.create ({
containerStyle:
{
flexDirection:'column',
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: 'white',
},
textStyle:
{
color: 'green',
height: 30,
width: 200,
fontSize: 18,
},
textInputStyle:
{
color: 'black',
height: 40,
width: 200,
borderWidth: 1,
borderColor: 'red',
backgroundColor: 'gray',
textDecorationLine: 'none',
fontSize: 15,
},
})
您的 MyTextInput
组件会在您每次键入内容时重新创建和重新呈现。将函数移动到新文件或 Form
组件之外。
import React, { Component , useState } from 'react';
import {
View,
Text,
TextInput,
Button,
StyleSheet,
} from 'react-native';
const MyTextInput = ({ valueVar, name, type, onChange }) => {
return (
<TextInput
style={styles.textInputStyle}
value={valueVar}
onChangeText={text => onChange({ name, type, text })}
/>
);
};
const Form = () => {
const [values, setValues] = useState({ email: "", a: ""});
const handleChange = (event) => {
const {name, type, text} = event;
setValues({...values, [name]: text})
}
const handleChangeTI = (text) => {
setValues({...values, a: text})
}
return (
<View style={styles.containerStyle}>
<View>
<Text style={styles.textStyle}>email </Text>
<MyTextInput
name="email"
type="text"
valueVar={values.email}
onChange={handleChange}
>
</MyTextInput>
</View>
<View>
<Text style={styles.textStyle}>TextInput</Text>
<TextInput
style={styles.textInputStyle}
value={values.a}
onChangeText={handleChangeTI}
/>
</View>
</View>
); // return
}; // const
export default Form;
const styles = StyleSheet.create({
containerStyle:
{
flexDirection:'column',
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: 'white',
},
textStyle:
{
color: 'green',
height: 30,
width: 200,
fontSize: 18,
},
textInputStyle:
{
color: 'black',
height: 40,
width: 200,
borderWidth: 1,
borderColor: 'red',
backgroundColor: 'gray',
textDecorationLine: 'none',
fontSize: 15,
},
});
我在输入字符后 TextInput 失去焦点时遇到问题。它只发生在我的自定义 TextInput 对象中。键入每个字符后,键盘将消失,我必须重新选择对象才能取回键盘。
我在 Android phone 上只有 运行 这个代码。我不确定 iOS 是如何工作的。
我浏览了本网站和其他网站上的许多话题,但找不到任何可以保持专注的话题。
在下面的代码中,我包含了 2 个 TextInput 对象。一个是我的自定义对象 MyTextInput。另一个是通用的 TextInput 对象。当在通用中输入文本时,一个焦点不会丢失,键盘也不会消失。在习惯中,一个焦点丢失,键盘消失。
如有任何帮助,我们将不胜感激。
import React, { Component , useState} from 'react';
import {
View,
Text,
TextInput,
Button,
StyleSheet,
} from 'react-native';
const Form = () => {
const [values, setValues] = useState({ email: "", a: ""});
const MyTextInput = ({ valueVar, name, type, onChange }) => {
return (
<TextInput
style={styles.textInputStyle}
value={valueVar}
onChangeText={text => onChange({ name, type, text })}
/>
);
};
const handleChange = (event) => {
const {name, type, text} = event;
setValues({...values, [name]: text})
}
const handleChangeTI = (text) => {
setValues({...values, a: text})
}
return (
<View style={styles.containerStyle}>
<View>
<Text style={styles.textStyle}>email </Text>
<MyTextInput
name="email"
type="text"
valueVar={values.email}
onChange={handleChange}
>
</MyTextInput>
</View>
<View>
<Text style={styles.textStyle}>TextInput</Text>
<TextInput
style={styles.textInputStyle}
value={values.a}
onChangeText={handleChangeTI}
/>
</View>
</View>
); // return
}; // const
export default Form;
const styles = StyleSheet.create ({
containerStyle:
{
flexDirection:'column',
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: 'white',
},
textStyle:
{
color: 'green',
height: 30,
width: 200,
fontSize: 18,
},
textInputStyle:
{
color: 'black',
height: 40,
width: 200,
borderWidth: 1,
borderColor: 'red',
backgroundColor: 'gray',
textDecorationLine: 'none',
fontSize: 15,
},
})
您的 MyTextInput
组件会在您每次键入内容时重新创建和重新呈现。将函数移动到新文件或 Form
组件之外。
import React, { Component , useState } from 'react';
import {
View,
Text,
TextInput,
Button,
StyleSheet,
} from 'react-native';
const MyTextInput = ({ valueVar, name, type, onChange }) => {
return (
<TextInput
style={styles.textInputStyle}
value={valueVar}
onChangeText={text => onChange({ name, type, text })}
/>
);
};
const Form = () => {
const [values, setValues] = useState({ email: "", a: ""});
const handleChange = (event) => {
const {name, type, text} = event;
setValues({...values, [name]: text})
}
const handleChangeTI = (text) => {
setValues({...values, a: text})
}
return (
<View style={styles.containerStyle}>
<View>
<Text style={styles.textStyle}>email </Text>
<MyTextInput
name="email"
type="text"
valueVar={values.email}
onChange={handleChange}
>
</MyTextInput>
</View>
<View>
<Text style={styles.textStyle}>TextInput</Text>
<TextInput
style={styles.textInputStyle}
value={values.a}
onChangeText={handleChangeTI}
/>
</View>
</View>
); // return
}; // const
export default Form;
const styles = StyleSheet.create({
containerStyle:
{
flexDirection:'column',
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: 'white',
},
textStyle:
{
color: 'green',
height: 30,
width: 200,
fontSize: 18,
},
textInputStyle:
{
color: 'black',
height: 40,
width: 200,
borderWidth: 1,
borderColor: 'red',
backgroundColor: 'gray',
textDecorationLine: 'none',
fontSize: 15,
},
});