.filter не является функцией. Попытка поиска по именам из данных API - PullRequest
2 голосов
/ 23 января 2020

Я пытаюсь реализовать поисковый фильтр в этом мини-приложении, используя API стран. Тем не менее, я получил сообщение об ошибке filter не является функцией.

Теперь я думаю, что это потому, что данные должны быть массивом, чтобы filter() работал. Я не уверен, как я смогу получить доступ к данным для поиска.

Изо всех сил пытаюсь обернуть голову вокруг этого.

Пример response.data из моего console.log

{data: Array(250), status: 200, statusText: "", headers: {…}, config: {…}, …}
            data: Array(250)
                  [0 … 99]
               0:
            name: "Afghanistan"
  topLevelDomain: [".af"]
      alpha2Code: "AF"
      alpha3Code: "AFG"
    callingCodes: ["93"]
         capital: "Kabul"
    altSpellings: (2) ["AF", "Afġānistān"]
          region: "Asia"
       subregion: "Southern Asia"
      population: 27657145
          latlng: (2) [33, 65]
         demonym: "Afghan"
            area: 652230
            gini: 27.8
       timezones: ["UTC+04:30"]

А вот моя функция фильтра, которая отображает ошибку

const Homepage = () => {
  const [countries, setCountries] = useState('');
  const [searchedCountry, setSearchedCountry] = useState('');

  useEffect(() => {
    console.log('effect');
    axios.get(`https://restcountries.eu/rest/v2/all`).then((response) => {
      console.log(response, 'promise fulfiled');
      setCountries(response.data);
    });
  }, []);

  const handleSearch = (event) => {
    setSearchedCountry(event.target.value);
  };

  // Filter function
  const filteredCountries = countries.filter((country) =>
   country.name.toLowerCase().includes(searchedCountry.toLowerCase())
  );

  return (
    <div className='homepage'>
      <input type='text' onChange={handleSearch} />
      <CountryList countries={countries} />
    </div>
  );
};

Было бы здорово понять это подробнее. Спасибо.

1 Ответ

4 голосов
/ 23 января 2020

Ваше начальное значение для countries неверно. используйте тот же тип для значения по умолчанию.

const [countries, setCountries] = useState([]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...