@fristyr
Начинающий вэб разработчик

Как отобразить данный json список городов в автокомплите?

https://codesandbox.io/s/fristyr-react-gx25s
Импортирую json список.

import cities from 'cities.json';

Мапирую его.

const citiesList = cities;

const citiesListNames = citiesList.map( item => {
  return item.name 
} )

console.log(citiesListNames)

Консоль выдает список названия стран, вроде все ок.
https://monosnap.com/file/BVx9Hbwb6d8PbXEmeKBUFzsg...

Для автокомплита я использовал эту библиотечку https://github.com/JedWatson/react-select довольная простая и делает то что мне нужно.
Она использует массив из объектов для того чтоб отображать выпадающий селект.
const options = [
  { value: 'Amsterdam', label: 'Amsterdam' },
  { value: 'London', label: 'London' },
  { value: 'Moscow', label: 'Moscow' },
];

Сам компонент вот:

<Select
            value={selectedOption}
            onChange={this.handleChange}
            options={options}
            name="city"
            className={styles.weather_city_select}
          />

У меня немного не получается передать мапированный список стран.
Я передавал в пропсы options={options} const citiesListNames но приложение зависает от такого количества данных.

Так вот. Что мне нужно сделать чтоб получить то действие которое я ожидаю?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
const citiesListNames = citiesList.map( item => {
  return item.name 
} )

Круто. Непонятно только, как после подобной манипуляции отличить Париж в Иль-де-Франс от Парижа в Онтарио. Или Москву Московской области от Москвы Пенсильвании.

приложение зависает от такого колличества данных

Как напрямую ограничить количество показываемых записей - что-то в документации не нашёл такой возможности. Можно попробовать закостылить это дело.

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

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

Войти через центр авторизации
Похожие вопросы