import React, { Component } from 'react';
import { Text, View, TextInput, Button, Alert } from 'react-native';
import datum from './data';
export default class Signup extends React.Component {
constructor(props) {
super(props);
this.state = { name: 'sff', number: '' };
}
signupPressed = () => {
const { name } = this.state;
console.info('checkss', name);
};
render() {
return (
<View
style = {{
flex: 1,
flexDirection: 'column',
justifyContent: 'space-evenly',
alignItems: 'center',
}}>
<TextInput
style = {{
height: 40,
borderColor: 'gray',
borderWidth: 1,
width: '50%',
}}
onChangeText = {TextInputValue => this.setState({ name })}
placeholder = "Name"
/>
<TextInput
style = {{
height: 40,
borderColor: 'gray',
borderWidth: 1,
width: '50%',
}}
onChangeText = {text => this.setState({ name })}
placeholder = "Mobile no"
/>
<Button
onPress = {this.signupPressed}
title = "Signup"
color = "#841584"
accessibilityLabel = "Learn more about this purple button"
/>
</View>
);
}
}
У меня есть текстовый ввод, но реквизит onChangeText не работает как есть
Ожидаемое поведение Должен регистрировать обновленное значение имени из состояния при нажатии кнопки
реальность
когда я нажимаю кнопку, она записывает только "checkss", а не значение имени
Что тут странного!!
когда я нажимаю кнопку в первый раз, он регистрирует меня "checkss, sff", но когда я нажимаю ее во второй раз, он показывает только checkss
<TextInput
value = {this.state.name}
style = {{height: 40, borderColor: 'gray', borderWidth: 1,width:'50%'}}
onChangeText = {(name) => this.setState({name})}
placeholder = "Name"
/>
Попробуйте приведенный выше код, он будет работать для вас
Это потому, что в onChangeText
вам нужно будет сделать это,
onChangeText = {value=>{this.setState({stateVariable:value})}};
@ Джордж, пожалуйста, отредактируйте ответ с правильным синтаксисом или хотя бы дайте правильный комментарий, что не так?
<TextInput
style = {{height: 40, borderColor: 'gray', borderWidth: 1,width:'50%'}}
onChangeText = {(text) => this.setState({name: text })}
placeholder = "Name"
/>
Ваш код не работает, потому что вы допустили ошибку при объявлении функции стрелки de
onChangeText = {TextInputValue => this.setState({name})}
Это должно быть
onChangeText = {TextInputValue => this.setState({ name: TextInputValue })}
Использование Ecma6 может быть упрощено как
onChangeText = {name => this.setState({ name })}
Чтобы избежать проблем с производительностью, рекомендуется не использовать встроенную функцию, поскольку она создается во всех циклах рендеринга. Лучше, если вы создадите метод класса и будете использовать его по ссылке.
export default class Signup extends React.Component {
constructor(props) {
super(props)
this.state = {name:"sff",number:""};
this.handleChangeEvent = this.handleChangeEvent.bind(this);
}
handleChangeEvent(name) {
this.setState({ name });
}
render() {
/* rest of code omitted */
<TextInput
style = {
{ height: 40, borderColor: 'gray', borderWidth: 1,width:'50%' }
}
onChangeText = {this.handleChangeEvent}
placeholder = "Mobile no"
/>
/* rest of the code omitted */
}
}
Почему это помечено как ответ? Это даже недопустимый синтаксис.