I want to render a component based on props passed by the parent component, then in the children component i evaluate the props using switch statement. I was unable to get return element based on props.length. I have searching for the way using conditional rendering properly in react, but it seems something in my code goes wrong and i didnt realize it until now.
//Countries.tsx
import React from "react";
import ListCountries from "./ListCountries";
import Country from "./Country";
const Countries = ({ data }) => {
let dataLength = data.length;
let component = null;
switch (dataLength) {
case dataLength === 1:
component = <Country data={data} />;
break;
case dataLength > 1:
component = <ListCountries data={data} />;
break;
case dataLength > 10:
component = <div>Too many matches, specify another filter</div>;
break;
default:
component = <p>Else statement</p>;
break;
}
return <>{component}</>;
};
export default Countries;
export default function App() {
const [countries, setCountries] = useState([]);
const [filteredCountries, setFilteredCountries] = useState([]);
const [query, setQuery] = useState(undefined);
useEffect(() => {
axios.get("https://restcountries.eu/rest/v2/all").then(res => {
setCountries(res.data);
});
}, [query]);
const inputSearchHandler = e => {
setQuery(e.target.value);
const res = countries.filter(country =>
country.name
.toLocaleUpperCase()
.includes(e.target.value.toLocaleUpperCase())
);
setFilteredCountries(res);
};
console.log("countries : ", countries);
console.log("countries length: ", countries.length);
console.log("filtered : ", filteredCountries);
console.log("filtered length: ", filteredCountries.length);
return (
<div className="App">
<SearchField inputSearchHandler={inputSearchHandler} />
<Countries data={filteredCountries} />
</div>
);
}```