Доступ к состоянию вне класса - Reactnative - this.setState не является функцией

Я использую пользовательские плавающие текстовые метки, которые находятся вне класса, и я хочу установить в нем состояние. как я могу это сделать, пожалуйста

У меня есть два плавающих текстовых поля, когда я нажимаю кнопку, я хочу установить состояние для введенных значений в поле ввода текста.

Ошибка - это получить

this.setState не является функцией


const TextfieldWithFloatingLabel_Card = MKTextField.textfieldWithFloatingLabel()
  .withPlaceholder(strings.nineDigitCardNumber)
  .withStyle(styles.textfieldWithFloatingLabel)
  .withTextInputStyle({ flex: 1 })
  .withFloatingLabelFont({
    fontSize: 12,
    fontWeight: '200',
    color: colors.primaryColor
  })
  .withKeyboardType('numeric')
  .withOnEndEditing(e => {
    this.setState({ cardDigits: e.nativeEvent.text });
    console.log('EndEditing', e.nativeEvent.text);
  })
  .build();

const TextfieldWithFloatingLabel_NationalId = MKTextField.textfieldWithFloatingLabel()
  .withPlaceholder(strings.nationalIdNumber)
  .withStyle(styles.textfieldWithFloatingLabel)
  .withTextInputStyle({ flex: 1 })
  .withFloatingLabelFont({
    fontSize: 12,
    fontWeight: '200',
    color: colors.primaryColor
  })
  .withKeyboardType('numeric')
  .withOnEndEditing(e => {
    this.setState({ nationalIdNumber: e.nativeEvent.text });
    console.log('EndEditing', e.nativeEvent.text);
  })
  .build();

class Login extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      cardDigits: '',
      IdNumber: ''
    };
  }

  render() {
    //console.log('rovers - ' + JSON.stringify(this.state.rovers))
    return (
      <ScrollView style={styles.mainContainer}>
        <TextfieldWithFloatingLabel_Card ref="tiNumber" />
        <TextfieldWithFloatingLabel_NationalId ref="tiNationalId" />
        <TouchableOpacity
          title="Transactions"
          style={{
            height: 60,
            backgroundColor: '#673fb4',
            marginTop: 20,
            alignItems: 'center',
            justifyContent: 'center'
          }}
          onPress={() => {
            consoleLog(
              'cardnum : ' +
                this.state.cardDigits +
                ' national id - ' +
                this.state.IdNumber
            );
          }}
        >
          <CommonText style={{ color: 'white' }}>
            {strings.signInLower}
          </CommonText>
        </TouchableOpacity>
      </ScrollView>
    );
  }
}

Спасибо R

1 ответ

+ Изменить

TextfieldWithFloatingLabel_Card

В функцию вместо переменной и везде, где вы вызываете TextfieldWithFloatingLabel_Card в компоненте, передаете это как параметр ему, чтобы при выполнении setState он работал

Я дам вам подсказку о том, как это сделать

Test.js

 const test = this = {
      this.setState({test: “working”});
 }
 export = test();

Компонент App.js

 import { test } from “./Test”;

 callTest = () => {
     test(this);
 }
 render(){
     return(
          <div onClick={this.callTest}>

          </div>
     )
 }

Итак, суть в том, что вам нужно передать компонент в импортированные обычные функции, чтобы вы могли установить состояние компонента.

То, что вы делаете, это старая методология. Я бы порекомендовал вам обрабатывать функции обработчика событий с помощью компонентов.

Пожалуйста, извините меня, если есть какие-либо опечатки, потому что я отвечаю на свой мобильный

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