Лог c, который я использовал при регистрации пользователя, заключается в добавлении его данных в путь в базе данных, а также в аутентификацию Firebase. В теории значениями было бы легче манипулировать. Моя цель - создать форму Formik, которая будет принимать существующее значение имени пользователя вошедшего в систему пользователя, отображать его в текстовом поле для изменения пользователем, а затем обновлять значение в базе данных Firebase. Кто-нибудь может помочь?
import React, {Component} from 'react';
import {TextInput, View, Button, StyleSheet} from 'react-native';
import {Formik} from 'formik';
import Firebase from 'firebase';
import 'firebase/database';
import 'firebase/auth';
export default class ChangeUsername extends Component {
constructor(props) {
super(props);
this.state = {
currentUsername: '',
Username: '',
};
}
getUsername() {
const userKey = Firebase.auth().currentUser.uid;
const userRef = Firebase.database().ref('users/' + userKey);
userRef.once('value').then(snapshot => {
const user = snapshot.val();
this.setState({currentUsername: user.username});
console.log(this.state.currentUsername);
});
}
changeUsername() {
const userKey = Firebase.auth().currentUser.uid;
const userRef = Firebase.database().ref('users/' + userKey);
userRef.update({
username: this.state.Username,
});
console.log(this.state.Username);
}
componentDidMount() {
this.getUsername();
this.changeUsername();
}
render() {
return (
<View>
<Formik
initialValues={{
username: this.state.currentUsername,
}}
enableReinitialize={true}
onSubmit={this.changeUsername()}>
{props => (
<View>
<TextInput
style={style.txtInput}
onChangeText={text => this.setState({Username: text})}
value={this.state.currentUsername}
/>
<Button title="Submit" onPress={props.handleSubmit} />
</View>
)}
</Formik>
</View>
);
}
}
Я также пытался создать форму с функциональным компонентом React, а не с классом. То, что в настоящее время происходит, это то, что текстовый ввод остается пустым и будет возвращаться к пустому каждый раз, когда я пытаюсь что-то набрать в нем. Кроме того, имя пользователя в базе данных будет обновлено до буквы, которую мне удастся набрать, прежде чем оно исчезнет. Т.е. я набираю букву "p", имя пользователя будет обновлено до строки "p" в базе данных firebase, после чего текстовый ввод будет очищен.