@fazzaamiarso
Posted
Hi Gediminas! Great work!
I have an improvement for you. You can remove the need for useEffect
when filtering. You can do that by deriving the filtered state from jobs
state. Here is my improvement.
const [selectedFilters, setSelectedFilters] = useState<string[]>([]);
const [jobs, setJobs] = useState<IJob[]>([]);
// will always be re-calculated everytime selectedFilters change. No need useEffect.
const filteredJobsSet = new Set(jobs.filter(job => {
const tags = [...job.tools, ...job.languages, job.role, job.level, job.location]
if (selectedFilters.every(tags.includes)) return job;
}));
const filteredJobs = Array.from(filteredJobsSet);
Here is a great blog post about deriving state! https://kentcdodds.com/blog/dont-sync-state-derive-it
I hope it helps! Cheers!
Marked as helpful
@Senatrius
Posted
@fazzaamiarso That does sound much better, thank you :) Will be sure to check out that blog post as well