Skip to content

Instantly share code, notes, and snippets.

@dschinkel
Last active October 7, 2020 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dschinkel/41838184b0e38296f6f71518631391ba to your computer and use it in GitHub Desktop.
Save dschinkel/41838184b0e38296f6f71518631391ba to your computer and use it in GitHub Desktop.
Shallow Render Hook with Async Side Effects
import React, { useEffect, useState } from 'react';
import { Company } from '../../Interfaces/Interfaces.company';
interface FeaturedCompaniesProps {
findFeaturedCompanies: () => Promise<Array<Company>>
}
const FeaturedCompanies = (props: FeaturedCompaniesProps) => {
const [featuredCompanies, setData] = useState([]);
useEffect(() => {
const fetchCompanies = async () => {
const companies: Array<Company> = await props.findFeaturedCompanies();
setData(companies);
};
fetchCompanies();
}, []);
return (
<span>
<div className="padding-bottom-50">
<div className="section-heading bold padding-top-10 font-22"> New Companies</div>
featuredCompanies && <PresentableFeaturedCompanies companies={featuredCompanies} data-testid="featuredCompanies" />
</div>
</span>
);
};
export function PresentableFeaturedCompanies({ companies }) {
return (
<>
<div className="margin-top-20">
{companies.map((company) => (
<div
className="all-20"
data-testid="company"
key={`featured-${company.name}`}>
{company.name}
</div>
))}
</div>
</>
);
}
export default FeaturedCompanies;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment