Firebase вставка происходит вместо обновления, ошибка не отображается - PullRequest
0 голосов
/ 30 апреля 2020

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

import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text, TextInput, Button, Alert } from 'react-native';
import {editAp} from '../pages/func';
import firebase from 'firebase';
if (!firebase.apps.length) {
 firebase.initializeApp({});
}
class Edit1 extends Component {
constructor(props){
super(props);
this.state = {
    email:this.props.navigation.state.params.email,
    password:this.props.navigation.state.params.password,
    keyis:this.props.navigation.state.params.keyis,
 };
}
submit1=()=>{
    console.log(this.props.navigation.state.params.keyis)
    firebase.database().ref('/users1').child(this.props.navigation.state.params.keyis).update(({email:this.state.email,password:this.state.password}))
    Alert.alert('Action!', 'user updated');
}
render(){
  return (
        <View style={styles.container}>
            <Text>Edit Here</Text>
            <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={email=>this.setState({email})} value={this.state.email}/>
            <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={password=>this.setState({password})} value={this.state.password}/>
            <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={keyis=>this.setState({keyis})} value={this.state.keyis}/>
       <Button title='Submit' onPress={this.submit1} />
        </View>
    );
    }
}
 const styles = StyleSheet.create({
 container: {
 flex:1,
 justifyContent: 'center',
 backgroundColor: '#fff',
 padding: 30,
 },
 });
 export default Edit1;

Я не знаю, что не так с моей функцией обновления электронной почты, паролем, значением ключа, которое я получаю в поле textinput, а также в консоли. Что не так в функции submit1 ?? Структура базы данных приведена ниже:

Database Structure

вставить код:

    import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text, TextInput, Alert, Button, TouchableOpacity, FlatList } from 'react-native';
import firebase from 'firebase';
if (!firebase.apps.length) {    firebase.initializeApp({}); }
class Form2 extends Component<{}> {
  constructor(props){
    super(props);
   this.state = {
     email:'',
    password:'',
      };  }
   addNew = () => {
    firebase.database().ref('/users1').push({
      email: this.state.email,
      password: this.state.password,

    });
    Alert.alert('Action!', 'user added');
    this.setState({
      email:'',
      password:'',
});  }
   render() {
  return(
<View style={styles.container}>
<Text style={styles.inpt}>Insert Ravel</Text>
<TextInput style={styles.inputBox1} underlinerColorAndroid='rgba(0,0,0,0)'
placeholder="Email"  onChangeText={e => { this.setState({  email: e,            });          }}     />
<TextInput style={styles.inputBox2} underlinerColorAndroid='rgba(0,0,0,0)'  placeholder="password" 
onChangeText={e => { this.setState({ password: e,            });       }}   />
<View style={styles.button1}>
<Button title='Insert Record' onPress={this.addNew.bind(this)}/>
</View></View>  )   } }
export default Form2;

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Попробуйте заменить ваш код на мой:

Часть регистрации:

import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text, TextInput, Alert, Button, TouchableOpacity, FlatList } from 'react-native';
import firebase from 'firebase';
if (!firebase.apps.length) {    firebase.initializeApp({}); }
class Form2 extends Component<{}> {
  constructor(props){
    super(props);
   this.state = {
     email:'',
    password:'',
      };  }
   addNew = () => {

    //MODIFIED PATH HERE
    firebase.database().ref('/users1/'+firebase.auth().currentUser.uid).set({

      email: this.state.email,
      password: this.state.password,

    });
    Alert.alert('Action!', 'user added');
    this.setState({
      email:'',
      password:'',
});  }

//This will creating node with user UID as value

Обновить код активности:

import React,{Component} from 'react';
import {  Platform, StyleSheet, StatusBar, View, Text, TextInput, Button, Alert } from 'react-native';
import {editAp} from '../pages/func';
import firebase from 'firebase';
if (!firebase.apps.length) {
 firebase.initializeApp({});
}
class Edit1 extends Component {
constructor(props){
super(props);
this.state = {
    email:this.props.navigation.state.params.email,
    password:this.props.navigation.state.params.password,
    keyis:this.props.navigation.state.params.keyis,
 };
}
submit1=()=>{
    console.log(this.props.navigation.state.params.keyis)

//Modified path here also

firebase.database().ref('/users1/').child(firebase.auth().currentUser.uid).update(({email:this.state.email,password:this.state.password}))
        Alert.alert('Action!', 'user updated');
    }
    render(){
      return (
            <View style={styles.container}>
                <Text>Edit Here</Text>
                <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={email=>this.setState({email})} value={this.state.email}/>
                <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={password=>this.setState({password})} value={this.state.password}/>
                <TextInput style={{marginTop:20, height:40, borderColor:'gray', borderWidth:1}} onChangeText={keyis=>this.setState({keyis})} value={this.state.keyis}/>
           <Button title='Submit' onPress={this.submit1} />
            </View>
        );
        }
    }
     const styles = StyleSheet.create({
     container: {
     flex:1,
     justifyContent: 'center',
     backgroundColor: '#fff',
     padding: 30,
     },
     });
     export default Edit1;

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

Просто измените путь. Остальной код такой же. Это создаст узел с UID пользователя вместо идентификатора базы данных. Дайте мне знать, если это работает. Не забудьте создать нового пользователя.

0 голосов
/ 30 апреля 2020

Я думаю, вам нужен какой-то идентификатор в коде обновления:

firebase.database().ref('/users1/'+userId)

, поэтому, возможно, firebase вставляет новые данные, потому что не знает идентификатор строк для обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...