Текст onChange не обновляет свое состояние

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

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
1 258
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

    <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})}};

Почему это помечено как ответ? Это даже недопустимый синтаксис.

George 07.06.2020 18:13

@ Джордж, пожалуйста, отредактируйте ответ с правильным синтаксисом или хотя бы дайте правильный комментарий, что не так?

Jaydeep Galani 08.06.2020 06:52
<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 */
  }
}

Другие вопросы по теме