我正在尝试学习如何在反应中使用API。我正在使用Rest countires API搜索国家名称。我正在从https://restcountries.eu/rest/v2/all获取数据,但是由于无法在对象上使用地图,因此我不知道如何处理该数据。
import axios from "axios";
import React, { useEffect, useState } from "react";
const App = () => {
const [countries, setCountries] = useState([]);
const [searchName, setSearchName] = useState("");
useEffect(() => {
axios.get("https://restcountries.eu/rest/v2/all").then(response => {
setCountries(response.data);
});
}, []);
const handleSearch = event => {
setSearchName(event.target.value);
};
return (
<div>
<div>
find countries <input onChange={handleSearch} />
</div>
<div></div>
</div>
);
};
export default App;
在键入以下内容后预期会列出国家:sw =博茨瓦纳,斯威士兰,瑞典...
答案 0 :(得分:1)
从这个问题看来,这是您应用程序的要求- 1
我使用您提供的代码-https://codesandbox.io/embed/58115762-rest-countries-o638k创建了此沙箱。
当您在搜索框中输入输入内容时,它会显示一对国家名称及其首字母。
这是我更改代码的方式:
search
API作为文本输入的值-searchName
https://restcountries.eu/rest/v2/name/ $ {searchName}
map
,countries
并获得相应的关键字。将这些键作为道具传递给新创建的Country
组件。
注意,我不需要更改您处理JSON响应的方式。
searchName
和countries
是用于呈现UI的仅有的两个状态变量。
答案 1 :(得分:0)
从ajax请求获取后,您需要呈现国家/地区,例如:
import axios from "axios";
import React, { useEffect, useState } from "react";
const App = () => {
const [countries, setCountries] = useState([]);
const [searchName, setSearchName] = useState("");
useEffect(() => {
axios.get("https://restcountries.eu/rest/v2/all").then(response => {
setCountries(response.data);
});
}, []);
const handleSearch = event => {
setSearchName(event.target.value);
};
return (
<div>
<div>
find countries <input onChange={handleSearch} />
</div>
<ul>
{(countries.length<=0)?"":
countries.map(country=> <li>country.name</li> )
}
</ul>
</div>
);
};
export default App;
答案 2 :(得分:0)
我认为这就是您要寻找的。 如果您有任何疑问,请随时提出:)
import axios from "axios";
import React, { useEffect, useState } from "react";
const App = () => {
const [countries, setCountries] = useState([]);
const [searchName, setSearchName] = useState("");
useEffect(() => {
axios.get("https://restcountries.eu/rest/v2/all").then(response => {
setCountries(response.data);
});
}, []);
const handleSearch = event => {
let str = event.target.value;
let filteredCountries = countries.filter((country) => country.name.toLowerCase().includes(str.toLowerCase()));
setCountries(filteredCountries);
setSearchName(str);
};
return (
<div>
<div>
find countries <input onChange={handleSearch} />
</div>
<ul> {(countries.length <= 0) ? "" : countries.map(country => <li>{country.name}</li>) } </ul>
</div>
);
};
export default App;
答案 3 :(得分:0)
data =[your array];
countryList = data.map(data=>data.name)
console.log(countryList)