Firebase SDK блокирует полную реакцию на приложение - PullRequest
0 голосов
/ 03 октября 2019

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

Однако, когда я реализовал функцию чата, что бы я ни делал, после отправки сообщения ( onSendMessage) Я не могу отправить еще один, пока функция не будет завершена (сообщение переведено и отправлено в firebase, что занимает довольно много времени). Это похоже на поведение синхронной блокировки .

  const ChatMessagesComponent = props => {
     const [messageText, setMessageText] = useState("")
     const { user, sendMessage, markMessageAsRead } = props

  const onSendMessage = message => {
    if (message !== "") {
      createAndSendMessage( // translate message and send it to firebase
        message.trim(),
        { chatId: chat.chat_id },
        { user, sendMessage }
      )
    }
  }

  return (
      <MessageBox
            messageText={messageText}
            setMessageText={setMessageText}
            onSendMessage={onSendMessage}
          />
   )
}
const MessageBox = props => {
  const { messageText, setMessageText, onSendMessage } = props

  return (
    <View style={styles.messageBoxContainer}>
        <Input
          multiline
          placeholder="Write something here..."
          value={messageText}
          onChangeText={value => setMessageText(value)}
          style={{
            container: { flex: 1 },
            input: styles.messageInput
          }}
        />

        <Touchable onPress={() => onSendMessage(messageText)}>
          <Icon
            // disabled={messageText === ""}
            reverse
            name="paper-plane"
            type="font-awesome"
            size={12}
            color={colors.tealPrimary}
            iconStyle={styles.messageSendIcon}
            reverseColor={colors.background}
          />
        </Touchable>
      </View>

Что мне здесь не хватает?

За благодарную помощь,
Спасибо Тобиас

Edit 2 Я выяснил, что onSendMessage action вызывает полную блокировку моего приложения.

Я использовал Firebase SDK для моего приложения реагирования, которое я также установил сейчас для ReactРодное приложение. Может ли это вызвать проблемы? С другой стороны, я использую метод обновления в другом месте без проблем. Было бы здорово узнать, что происходит.

export const sendMessage = (data, messageRef, chatRef) => dispatch => {
  // messageRef.set works without problems, but as soon as I try to 
  // update the chat it blocks my app. I tried updated the chat separately, 
  // no success. Both following methods block my UI for around 10sec.

  // chatRef.update({ updated_at: data.created_at })
  // chatRef.set({ updated_at: data.created_at }, { merge: true })

  return messageRef.set(data).then(() => {
    dispatch(successAction(ADD_MESSAGES_SUCCESS, data))
    return data
  })
}
...