Я получаю сообщение об ошибке при попытке обновить данные из firestore "FirebaseError: Function CollectionReference.doc ()" - PullRequest
0 голосов
/ 21 мая 2019

Я создаю небольшое собственное приложение для реакции, когда я добавляю некоторый код для обновления некоторых данных из firebase, в консоли отображается эта ошибка: «FirebaseError: Функция CollectionReference.doc () требует, чтобы ее первый аргумент был типа non- пустая строка, но это было: undefined "

код моего действия:

const updateChat =(newChat)=>{ 

  return (dispatch)=>{    
    console.log("trying to update: ", newChat);
    console.log("trying to update and getting the id: ", newChat.id);
    firestore.firestore().collection("chat").doc(newChat.id)
     .update(
       {
         msg: newChat,
       }
      )
     .then(() =>{ 
       dispatch({
         type:'UPDATE_CHAT',  
       })  
      })
      .catch(function(error) {
        console.error("Error updating document: ", error);
    })
 }}

код моего компонента:

class SettingsScreen extends React.Component {
  static navigationOptions = {
    title: 'Chat Screen',
  };
   state = {
       id: "",
       chat_input: "",
       updated: false,
   }

   onNewChat = () => {

       this.props.addChat(
           this.state.chat_input
       )
       this.setState({
           chat_input: ""
       });
       Keyboard.dismiss();
   }

    handleUpdate  = (id, chat_input) => {
        this.setState(
            {
                id:id,
                chat_input: chat_input,
                updated: true,
            }
        )
    }
    saveUpdate=()=>{
        this.props.updateChat(this.state.chat_input)
        this.setState({
            chat_input: "",
            id: "",
       })  
     }

   renderItem = ( {item} ) => {
       return (
           <View style={styles.row}>
               <Text style={styles.message} >{item.msg}</Text>
               <TouchableOpacity
                    style={styles.button}
                    onPress={ () => {this.props.deleteChat(item.id)} }
                >
                  <Image
                    source={require('../assets/images/trash2.png')}
                    fadeDuration={0}
                    style={{width: 30, height: 30}}
                  />
                </TouchableOpacity>
                <TouchableOpacity
                    style={styles.buttonEdit}
                    onPress={ () => { this.handleUpdate(item.id, item.msg} }
                >
                  <Image
                    source={require('../assets/images/edit.png')}
                    fadeDuration={0}
                    style={{width: 30, height: 30}}
                  />
                </TouchableOpacity>
           </View>
       );
   }

  render() {
    const { thread } = this.props || []

       if (!thread) {
           return (
                <View style={styles.container}>
                    <Text>Loading...</Text>
                </View>
           )
       }
    return ( 
       <View style={styles.container}>
               <FlatList
                   data={thread}
                   renderItem={this.renderItem}
                   inverted
                   keyExtractor={(item, index) => index.toString()}  
               />
               <KeyboardAvoidingView behavior="padding">
                   <View style={styles.footer}>
                       <TextInput
                           value={this.state.chat_input}
                           onChangeText={text => this.setState({ chat_input: text })}
                           style={styles.input}
                           underlineColorAndroid="transparent"
                           placeholder="Type something nice"
                       />
                       <TouchableOpacity onPress={
                            this.state.updated
                                ? this.saveUpdate()
                                : this.onNewChat.bind(this)
                            }
                        >
                           <Text style={styles.send}>Send</Text>
                       </TouchableOpacity>
                   </View>
               </KeyboardAvoidingView>
           </View>
    );
  }
}
const mapStateToProps = (state) => {
 return {
   thread: state.firestore.ordered.chat 
 }
}

export default compose(
   connect(mapStateToProps, {addChat, deleteChat, updateChat}),
   firestoreConnect([
       { collection: 'chat'},
   ]))(SettingsScreen);

I got this error on console

1 Ответ

1 голос
/ 21 мая 2019

Вы не передаете всю информацию в свое действие updateChat. Редактировать, как показано ниже

saveUpdate=()=>{
    this.props.updateChat({
        chatInput: this.state.chat_input,
        id: this.state.id
    })
    this.setState({
        chat_input: "",
        id: "",
    })  
}

Вам также необходимо изменить параметры обновления следующим образом:

firestore.firestore().collection("chat").doc(newChat.id)
    .update(
       {
          msg: newChat.chatInput,
       }
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...