Выполняются ли компоненты жизненного цикла и обратный вызов подписки в отдельном потоке?

#amazon-web-services #react-native #aws-amplify

#amazon-web-services #react-native #aws-amplify

Вопрос:

Когда, как только я отправляю сообщение, все сообщения над ним удаляются. В случае, если я снова извлекаю все сообщения из базы данных, это работает. Итак, ниже приведен текст моего кода, в котором я делаю запрос на усиление каждый раз, когда генерируется новое сообщение:

 const ChatRoomScreen = () => {

const [messages, setMessages] = useState([]);
const [myId, setMyId] = useState(null);

const route = useRoute();

const fetchMessages = async () => {
  const messagesData = await API.graphql(
  graphqlOperation(
    messagesByChatRoom, {
      chatRoomID: route.params.id,
      sortDirection: "DESC",
    }
  )
)

//console.log("FETCH MESSAGES")
 setMessages(messagesData.data.messagesByChatRoom.items);
}

useEffect(() => {
fetchMessages();
}, [])

useEffect(() => {
  const getMyId = async () => {
    const userInfo = await Auth.currentAuthenticatedUser();
    setMyId(userInfo.attributes.sub);
}
getMyId();
}, [])

useEffect(() => {
  const subscription = API.graphql(
    graphqlOperation(onCreateMessage)
  ).subscribe({
    next: (data) => {
      const newMessage = data.value.data.onCreateMessage;

      if (newMessage.chatRoomID !== route.params.id) {
      //console.log("Message is in another room!")
      return;
    }
      setMessages([newMessage, ...messages]);   //This line creates issues
      //If I fetch all messages again from database, it works.
  }
});

return () => subscription.unsubscribe();
}, [])
 

Комментарии:

1. Какие конкретные проблемы создает эта строка?

2. По сути, это приведет к удалению ранее созданных сообщений, и созданное новое сообщение будет отображаться только на экране.