доступ к состоянию после его изменения с помощью ошибки возврата циклического значения объекта onchange

#reactjs #react-native #state

#reactjs #react-native #состояние

Вопрос:

всем доброго дня,

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

когда я позже пытаюсь получить доступ к своему состоянию, я получаю cyclic object value ошибку. после некоторого исследования я выяснил, что это вызвано методом onchange, используемым для каждого из текстовых вводов (2).

ниже приведен мой код и опробованные решения.

Компоненты:

 <TextInput  
          onChange={uname => this.setState(/* { username: uname } */ updateUsername(uname))}
          placeholder={strings('login.username')}
          style={styles.input}
        />
        <TextInput
          onChange={pwd => this.setState(/* { password: pwd } */ updatePassword(pwd) ) }
          placeholder={strings('login.password')}
          style={[styles.input, styles.password]}
          secureTextEntry={true}
        />
        < TouchableOpacity onPress = { () => this.login()} >
          <Text style={styles.btn}>{strings('login.login')}</Text>
        </TouchableOpacity>
  

как вы можете видеть из комментариев внутри реквизита onchange для ввода текста, я попробовал 2 метода обновления состояния:

я попытался обновить его обычным способом, используя метод setState в компоненте. затем я попытался определить 2 функции вне класса, а затем использовать их для обновления класса. ни одно из решений не имело никакого значения.

 const updateUsername = (username) => {
  return (prevState, currProps) => {
    return {...prevState, username}
  }
}

const updatePassword = (password) => {
  return (prevState, currProps) => {
    return {
      ...prevState,
      password
    }
  }
}

class Login extends Component {
  ....
}
  

это функция, в которой я получаю error.it определяется внутри класса компонента и запускается при нажатии кнопки.

 login() {
   console.log(this.state)
}
  

мне было интересно, есть ли у кого-нибудь идеи о том, как решить эту проблему.

заранее благодарю всех за ваше время и усилия.

Ответ №1:

Используйте onChangeText вместо onChange .

onChange передает nativeEvent объект, в то время как onChangeText просто передает строку.