Задать вопрос

Как удалить дублирование стейтов в reactjs?

Всем привет. Есть проблема с дублированием стейтов.
Получаю данные из json. Все ок. Все классно. Только они дублируются в самом json, и соответственно на самой странице.
усл.
Астрахань
Астрахань
Астрахань
Барнаул
Вологда
Вологда и тд.

В нативном js все без проблем поймал, отфильтровал, вывел.
Впилить jsку в реакт и соединить со стейтами - не смог. (может там и стейты не нужны - хз)

Сам, с ними вожусь уже несколько дней.
Буду очень благодарен если подскажите как это отфильтровать, и вывести.

import React, { useEffect, useState } from 'react'

export default function Zapros() {
  const [countryNames, setCountryNames] = useState(null)
  useEffect(() => {
    fetch('https://myjson.xxx.es')
    .then((res) => {
      if(res.ok) {
        return res.json()
      }
      throw new Error('ОШИБКА')
    })
    .then((res) => setCountryNames(res.DATA)) // DATA - параметр из json
    .catch((err) => console.log(err))
  }, [])

  return (
    <div>
      {countryNames && countryNames.map((vyvod) => {
          let country = vyvod.COUNTRY_NAME // COUNTRY_NAME - параметр из json
          return <div> {country}</div>
    })}
    </div>
  );
}
  • Вопрос задан
  • 254 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
ivankprod
@ivankprod
Системный / веб fullstack-разработчик
Если нужно просто убрать дубликаты, то:

return (
    <div>
      {countryNames && countryNames.filter((item, index, array) => {
           return index > 0 ? item.COUNTRY_NAME !== array[index - 1].COUNTRY_NAME : true
      }).map((vyvod) => {
           let country = vyvod.COUNTRY_NAME
           return <div> {country}</div> // НЕ ЗАБЫВАЕМ ПРО KEY!!!
    })}
    </div>
  );


Если же нужно убрать дубликаты в стейте, то:
.then((res) => {
   setCountryNames(() => {
      return res.DATA.filter((item, index, array) => {
           return index > 0 ? item.COUNTRY_NAME !== array[index - 1].COUNTRY_NAME : true
      })
   })
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы