React-native: как отображать состояние

У меня проблемы с отображением моего state. Начальное значение моего состояния empty, но когда я нажимаю кнопку state change.

Я хочу увидеть это изменение немедленно, но state только renders когда начну что-то печатать в моем Textinput

Это мое состояние:

  constructor(props) {
    super(props)
    this.state = {
      noteText: '',
      userName:'',
  }
}

Я меняю состояние с помощью кнопки onPress

changeState(){
this.setState({userName:'Kevin'})
}

Здесь я отдаю свое состояние

    <View>
//I want to immediately render this.state.userName
       <Text>{this.state.userName}</Text>
          <TextInput
                    onChangeText = {(noteText) => this.setState({noteText:noteText})}
                    value = {this.state.noteText}
                    />
    </View>

Мое состояние не будет отображаться, пока я не начну что-то печатать в своем TextInput. Любая идея, как я могу сделать немедленно?

Вы можете скорее сделать changeState=()=>{} или this.changeState = this.changeState.bind(this) в своем конструкторе.

abranhe 17.07.2019 06:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
981
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У вас есть два пути здесь.

Установить состояние по умолчанию,

constructor(props) {
    super(props)
    this.state = {
      noteText: '',
      userName:'Kevin',
  }
  this.changeState = this.changeState.bind(this);
}

Или звоните changeState в componentDidMount,

componentDidMount(){
   this.changeState(); //bind this to changeState in constructor
}

Вы можете скорее использовать внутреннюю привязку своей функции внутри вашего конструктора или использовать функцию стрелки.

constructor(props) {
  this.changeState = this.changeState.bind(this);
}

или

changeState = () => {
  this.setState({ userName: "Kevin" });
};

Попробуйте простую закуску: https://snack.expo.io/@abranhe/change-state

import React, { Component } from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';

export default class App extends Component {
  state = { userName: '' };

  changeState = userName => {
    this.setState({ userName });
  };

  render() {
    return (
      <View style = {styles.container}>
        <Text style = {styles.username}>{this.state.userName}</Text>
        <Button title = "Abraham" onPress = {() => this.changeState('Abraham')} />
        <Button title = "James" onPress = {() => this.changeState('James')} />
        <Button title = "Mark" onPress = {() => this.changeState('Mark')} />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
  },
  username: {
    alignSelf: 'center',
    marginBottom: 20,
  },
});

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