База данных (Firebase) с React Native - PullRequest
0 голосов
/ 25 апреля 2019

Я получаю свои данные из средства выбора, чтобы пользователь мог редактировать и обновлять таблицу «Tarefas». Проведя несколько тестов, я понял, что мне нужен дочерний код от «Tarefas», чтобы сделать его современным, но я не знаю, как создать этот код. На странице «Пользователь» я получаю данные с помощью «user.uid», и теперь мне интересно, нужен ли мне еще один «.child», показывающий ключ ребенка от «Tarefa». Проблема здесь в том, что я понятия не имею, какая команда это делает. Когда я ставлю «.set», он сохраняет данные без «первичного ключа» и стирает всю таблицу. Однако при обновлении «Тарефа» (ключ), выбранный пользователем, также необходимо обновить.

constructor() {
        super();
        this.state = {
          status: '',
          descricao: '',
          valor: '',
          titulo: [],
          titulo_selecionado: ""
        };
        this.cadastroanuncio = this.cadastroanuncio.bind(this);
        firebase.auth().onAuthStateChanged((user) => {
          if (user) {
            firebase.database().ref('Tarefas').child(user.uid).on('value', (snapshot) => {
              let state = this.state;
              state.titulo = [];

              snapshot.forEach((childItem) => {
                state.titulo.push({
                  key: childItem.key,
                  titulo: childItem.val().titulo,
                  status: (String(childItem.val().status)),
                  descricao: childItem.val().descricao,
                  valor: childItem.val().valor,
                });
              });
              this.setState(state);
            });
          }
        });
      }

      RetornarDadosAnuncio = ((titulo) => {
        this.state.titulo.map((item, index) => { 
          if (item.titulo == titulo) {
            //Atualizar os campos do formulario
            this.setState({titulo_selecionado: item.titulo, status: item.status, descricao: item.descricao, valor: item.valor});
          }
        });
      });


//Code that I do both pro ccreate and now pro update ...

    cadastroanuncio() {
        if (this.state.titulo.length > 0) {
          firebase.auth().onAuthStateChanged((user) => {
             firebase.database().ref('Tarefas').child(user.uid).set({
              titulo:this.state.titulo,
              descricao:this.state.descricao,
              valor:this.state.valor,
              status:this.state.status,
            });
          }); 
          alert("Tarefa Atualizada");
        }
      }

      render() {
        return (
          <View style={styles.container}>

            <Text style={styles.logoText}>Selecione o Anuncio:</Text>
            <Text style={styles.texto}>Titulo do Anuncio:</Text>
            <Picker
              selectedValue={this.state.titulo_selecionado}
              style={styles.picker}
              onValueChange={(itemValue, itemIndex) => this.RetornarDadosAnuncio(itemValue)}>
              {this.state.titulo.map((item, index) => {
                return (
                  <Picker.Item label={item.titulo} value={item.titulo} key={index} />
                );
              })}
            </Picker>
            <Text style={styles.texto}>Titulo do Anuncio:</Text>
              <TextInput style={styles.inputBox}
                underlineColorAndroid='rgba(0,0,0,0)'
                placeholder="Titulo"
                placeholderTextColor="#ffffff"
                selectionColor="#fff"
                value={this.state.titulo_selecionado}
                onChangeText={(titulo) => this.setState({ titulo })}
              />
            <Text style={styles.texto}>Descrição do Anuncio:</Text>
            <TextInput style={styles.inputBox}
              underlineColorAndroid='rgba(0,0,0,0)'
              placeholder="Descrição"
              placeholderTextColor="#ffffff"
              selectionColor="#fff"
              value={this.state.descricao}
              onChangeText={(descricao) => this.setState({ descricao })}
            />
            <Text style={styles.texto}>Valor do Anuncio:</Text>
            <TextInput style={styles.inputBox}
              underlineColorAndroid='rgba(0,0,0,0)'
              placeholder="R$0000,00"
              placeholderTextColor="#ffffff"
              selectionColor="#fff"
              keyboardType="number-pad"
              value={this.state.valor}
              onChangeText={(valor) => this.setState({ valor })}
            />
            <Text style={styles.texto}>Status:</Text>
            <Picker
              selectedValue={this.state.status}
              style={styles.picker}
              onChangeText={(status) => this.setState({ status })}
              onValueChange={(itemValue, Index) =>
                this.setState({ status: itemValue })
              }>
              <Picker.Item label="Não Realizado" value="0" />
              <Picker.Item label="Realizado" value="1" />
            </Picker>
            <TouchableOpacity style={styles.button} onPress={this.cadastroanuncio}>
              <Text style={styles.buttonText}>Atualizar Anuncio</Text>
            </TouchableOpacity>

          </View>
        );
      }
    }

Firebase

Database Image

...