【发布时间】:2020-12-23 01:05:00
【问题描述】:
这是我在 Codesandbox https://codesandbox.io/s/filter-search-gxidc?file=/src/App.js 上的应用的链接,它只是一个组件 app.js
在 data.js 我有一个对象数组:
export const data = [
{
currencies: [{ code: "AFN", name: "Afghan afghani", symbol: "؋" }],
languages: [
{ iso639_1: "ps", iso639_2: "pus", name: "Pashto", nativeName: "پښتو" },
{ iso639_1: "uz", iso639_2: "uzb", name: "Uzbek", nativeName: "Oʻzbek" },
{
iso639_1: "tk",
iso639_2: "tuk",
name: "Turkmen",
nativeName: "Türkmen"
}
],
flag: "https://restcountries.eu/data/afg.svg",
name: "Afghanistan",
topLevelDomain: [".af"],
capital: "Kabul",
region: "Asia",
subregion: "Southern Asia",
population: 27657145,
borders: ["IRN", "PAK", "TKM", "UZB", "TJK", "CHN"],
nativeName: "افغانستان"
},
{
currencies: [{ code: "EUR", name: "Euro", symbol: "€" }],
languages: [
{
iso639_1: "sv",
iso639_2: "swe",
name: "Swedish",
nativeName: "svenska"
}
],
flag: "https://restcountries.eu/data/ala.svg",
name: "Åland Islands",
topLevelDomain: [".ax"],
capital: "Mariehamn",
region: "Europe",
subregion: "Northern Europe",
population: 28875,
borders: [],
nativeName: "Åland"
},
{
currencies: [{ code: "ALL", name: "Albanian lek", symbol: "L" }],
languages: [
{ iso639_1: "sq", iso639_2: "sqi", name: "Albanian", nativeName: "Shqip" }
],
flag: "https://restcountries.eu/data/alb.svg",
name: "Albania",
topLevelDomain: [".al"],
capital: "Tirana",
region: "Europe",
subregion: "Southern Europe",
population: 2886026,
borders: ["MNE", "GRC", "MKD", "KOS"],
nativeName: "Shqipëria"
},
{
currencies: [{ code: "DZD", name: "Algerian dinar", symbol: "د.ج" }],
languages: [
{ iso639_1: "ar", iso639_2: "ara", name: "Arabic", nativeName: "العربية" }
],
flag: "https://restcountries.eu/data/dza.svg",
name: "Algeria",
topLevelDomain: [".dz"],
capital: "Algiers",
region: "Africa",
subregion: "Northern Africa",
population: 40400000,
borders: ["TUN", "LBY", "NER", "ESH", "MRT", "MLI", "MAR"],
nativeName: "الجزائر"
},
{
currencies: [{ code: "USD", name: "United State Dollar", symbol: "$" }],
languages: [
{
iso639_1: "en",
iso639_2: "eng",
name: "English",
nativeName: "English"
},
{
iso639_1: "sm",
iso639_2: "smo",
name: "Samoan",
nativeName: "gagana fa'a Samoa"
}
],
flag: "https://restcountries.eu/data/asm.svg",
name: "American Samoa",
topLevelDomain: [".as"],
capital: "Pago Pago",
region: "Oceania",
subregion: "Polynesia",
population: 57100,
borders: [],
nativeName: "American Samoa"
},
{
currencies: [{ code: "EUR", name: "Euro", symbol: "€" }],
languages: [
{ iso639_1: "ca", iso639_2: "cat", name: "Catalan", nativeName: "català" }
],
flag: "https://restcountries.eu/data/and.svg",
name: "Andorra",
topLevelDomain: [".ad"],
capital: "Andorra la Vella",
region: "Europe",
subregion: "Southern Europe",
population: 78014,
borders: ["FRA", "ESP"],
nativeName: "Andorra"
},
{
currencies: [{ code: "AOA", name: "Angolan kwanza", symbol: "Kz" }],
languages: [
{
iso639_1: "pt",
iso639_2: "por",
name: "Portuguese",
nativeName: "Português"
}
],
flag: "https://restcountries.eu/data/ago.svg",
name: "Angola",
topLevelDomain: [".ao"],
capital: "Luanda",
region: "Africa",
subregion: "Middle Africa",
population: 25868000,
borders: ["COG", "COD", "ZMB", "NAM"],
nativeName: "Angola"
}
];
我想在 app.js 中映射并显示每个国家/地区的信息(我做了这部分)
这是 app.js 中的代码
import React, { useState, useEffect } from "react";
import "./styles.css";
import { data } from "./data";
export default function App() {
const [cuntries, setCountries] = useState([]);
const [region, setRegion] = useState('');
useEffect(()=>{
setCountries(data)
},[])
function filterByRegion(event) {
setRegion(event.target.value);
handleSubmit()
// event.preventDefault()
}
function handleSubmit(){
const newArr = cuntries.filter(cunt=> cunt.region === region)
setCountries(newArr)
}
console.log(region);
console.log(cuntries);
return (
<div className="App">
<h1>filtering</h1>
<form onChange={filterByRegion}>
<label>Filter by region:</label>
<select name="regions" id="region-select" >
<option value="">Chose a region</option>
<option value="Africa">Africa</option>
<option value="Americas">Americas</option>
<option value="Asia">Asia</option>
<option value="Oceania">Oceania</option>
<option value="Polar">Polar</option>
</select>
</form>
<div>
{cuntries.map((country) => {
return (
<div key={country.name} className="country">
<h3>{country.name}</h3>
<h3>{country.nativeName}</h3>
<h3>{country.region}</h3>
</div>
);
})}
</div>
</div>
);
}
在 app.js 中,我有一个包含区域的选择元素 我想过滤用于渲染每个国家/地区的数组,这样当我选择不同的区域时,map 方法会渲染该区域中的国家/地区
我尝试了一些解决方案,但都没有奏效。
再次链接到应用程序https://codesandbox.io/s/filter-search-gxidc?file=/src/App.js:0-1424
【问题讨论】:
-
App.js 中的一些拼写错误 -
cuntries而不是countries
标签: javascript arrays reactjs filter react-hooks