Операция цикла useEffect - PullRequest
       0

Операция цикла useEffect

0 голосов
/ 31 марта 2020

У меня есть функция, которая извлекает сообщения из Firebase:

getAddedMessages()

Этот метод получает только UID для сообщений из базы данных

Этот метод вызывает другую функцию:

followThePik(messageId)

Метод принимает messageId, полученный в предыдущем сообщении

Когда это сделано, я обновляю информацию в State

setNewMessage(message)

Сохраняет содержимое сообщения в состояние

Я подготовил useEffect , которое выполняется при обновлении newMessage

useEffect(() => {
    //method 1
    //method async 2
    //method async 3
}, [newMessage]);

useEffect состоит из различных методов

ИНФОРМАЦИЯ:

Может быть несколько новых сообщений одновременно

У меня есть такой проблема в том, что прежде чем он завершит вызов всех useEffect, будут выполнены дальнейшие методы

У меня есть одно сообщение, сохраненное в состоянии newMessage. Прежде чем использовать его в useEffect, другой вставляет его, и, в крайнем случае, процесс работает только для последнего сообщения

Главный вопрос

Есть ли что-нибудь, что вы можете сделать, чтобы заблокировать дальнейшие процессы, пока useEffect не будет завершено?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

В вашем коде newMessage является зависимостью для useEffect и каждый раз, когда он устанавливаетState для сообщения, он снова запускает useEffect. Поэтому, чтобы избежать этого, создайте другой метод и вызовите этот метод из useEffect, чтобы избежать зависимости в useEffect

const completeProcess = () => 
{
   async method 1
   async method 2
   async method 3
}

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

0 голосов
/ 31 марта 2020

Мы можем попробовать два способа

  1. Попробуйте использовать загрузочный setState после того, как вызовы asyn c завершены в useEffect (). На основе значения вы можете инициировать вызов getAddedMessage.

  2. Или же после окончания обработки этого массива сообщения можно перебрать для useEffect ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...