Нужно сравнить значение ключа с массивом

Рейтинг: 1Ответов: 1Опубликовано: 18.05.2023

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

function getMessage () {
api
  .getMessage()
  .then(res => {
    let idArr = []
    if (!idArr.includes(res[0].idMessage)) {
      idArr.push(res[0].idMessage)
      setMessages([
        { message: res[0].textMessage, ownMessage: false },
        ...messages
      ])
      console.log(res[0].idMessage) // BAE5E73CD474DE6A
      console.log(idArr) // ['BAE5E73CD474DE6A']
      console.log(res) // ключ-значение в объекте: idMessage: "BAE5E73CD474DE6A"
    } else {
      console.log(`Второй вызов ${idArr}`)
    }
  })
  .catch(err => console.log(err))

}

Ответы

▲ 0

Решил проблему добавлением стейта для хранения id

const [idArr, setIdArr] = useState([])
const idArrCopy = Object.assign([], idArr)

function getMessage () {
api
  .getMessage()
  .then(res => {
    let idMessage = res[0].idMessage
    if (!idArrCopy.includes(idMessage)) {
      setMessages([
        { message: res[0].textMessage, ownMessage: false },
        ...messages
      ])
      idArrCopy.push(idMessage)
      setIdArr(idArrCopy)
    } else {
      console.log(`Такой Id уже есть: ${idArr}`)
    }
  })
  .catch(err => console.log(err))

}