Я начал использовать только перехватчики и получил все, что когда-то было реализовано с помощью класса и его методов жизненного цикла.
Однако, когда я реализовал функцию чата, что бы я ни делал, после отправки сообщения ( 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
})
}