Тип и полезная нагрузка отправляются без вызова - PullRequest
0 голосов
/ 12 февраля 2019

В настоящее время я работаю над приложением react-native с функцией чата.Я использую redux для хранения своих состояний.Поэтому после нажатия кнопки отправки для отправки сообщения вызывается действие, чтобы отправить сообщение в firebase и впоследствии отобразить его на экране.

Моя текущая проблема заключается в том, что в то время как вызванное мною действие отправляет правильный тип/ payload, также отправляется другой тип / payload, который не отправляется в вызываемом действии.По-видимому, каким-то образом вызывается другое действие, содержащее тип / полезную нагрузку.

Код действия, которое не вызывается, выглядит следующим образом:

const getChatData = (chatIDs, userName, uid) => async dispatch => {
  console.log('hasdhkhwerljlkbgkanndhadndngknnjnjsnfjskdnfjsuvhshdifhuishiduhfuishdkfnkjsndf')
  const chatData = []
  for (const key of chatIDs) {

     [...]

        // get message
        firebase.database().ref('messages/' + key)
          .orderByChild('timestamp').limitToLast(1)
          .on('child_added', snapshot => {
            const { text, timestamp, user } = snapshot.val();
            const { name } = user;

            chatData.push({ key, members: displayNameArray, text, timestamp, name })
            dispatch({
              type: GET_CHAT_DATA,
              payload: chatData
            })
          })
      })
  }
}

Как я уже говорил, тип GET_CHAT_DATA отправляется, хотя это действие не вызывается.Кроме того, console.log не показывает длинное тестовое сообщение, которое должно означать, что это действие не вызывается, верно?

Что может вызвать это странное поведение?

Спасибомного!

1 Ответ

0 голосов
/ 12 февраля 2019

Таким образом, дело даже в том, что вы не выполнили функцию, но там вы зарегистрировали событие в firebase

 .on('child_added', snapshot => { })

Теперь, когда сработает это событие child_added, будет выполняться обработчик.Вот почему ваш диспетчер работает, потому что он находится внутри обработчика событий.

 firebase.database().ref('messages/' + key)
          .orderByChild('timestamp').limitToLast(1)
          .on('child_added', snapshot => {
            // this is the event handler which is executing
            // when the "child_added" event is triggered
            const { text, timestamp, user } = snapshot.val();
            const { name } = user;

            chatData.push({ key, members: displayNameArray, text, timestamp, name })
            dispatch({
              type: GET_CHAT_DATA,
              payload: chatData
            })
          })
      })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...