localStorage
에 저장해둔 후json-server
에 있는 사진 작가의 데이터를 가져와1. 서버에서 사진 작가데이터를 가져온다.
2. 로컬스토리지에 있는 유저의 사전조사 결과를 가져온다.
3. 사진 작가의 데이터를 순회하며
유저의 사전조사 값과 일치하는 데이터가 있으면
점수를 1씩 증가한다.
4. 한 차례씩 순회가 끝날 때마다 사진 작가의 데이터 객체에
계산 된 점수를 업데이트 해준다.
5. 업데이트 된 사진 작가의 데이터를 배열에 담아 state에 담는다.
const matching = async () => {
// 사진 작가 데이터를 가져오고 그 뒤에 매칭 진행
const artist = await getData();
let matchPoint = 0; // 유저와 사진작가의 접점이 있다면 증가하게 될 변수
const matchingList = []; // 불러 온 작가의 데이터를 업데이트 하고 담아둘 배열
// 작가들의 데이터를 돌면서 카테고리와 지역에 관한 데이터를 매칭
// 일치하는 데이터가 있으면 matchPoint를 증가 후 그 작가의 데이터에 추가
for (let i = 0; i < artist.length; i++) {
// 유저가 원하는 지역과 사진 작가의 활동 지역이 일치 시 +1점
artist[i].area === userDataArr[2] ? (matchPoint += 1) : (matchPoint += 0);
// 사진 작가의 주 활동 카테고리 데이터(배열)를 순회하며
for (let j = 0; j < artist[i].category.length; j++) {
// 유저가 원하는 카테고리와 사진작가의 주 활동 카테고리가 일치 시 +1점
artist[i].category[j] === userDataArr[0] ? (matchPoint += 1) : (matchPoint += 0);
}
// 접점에 따라 증가한 점수를 point속성에 담아 사진 작가의 객체 업데이트
matchingList.push({ ...artist[i], point: matchPoint });
// 현재 페이지에서 활용할 사진 작가 데이터를 state에 set 해준다.
setPhotographer(matchingList);
}
};
styled-component
에 props로 유저의 데이터를 전달해주고<styled-components>
const Category = styled.li.attrs((props) => ({
key: `${props.$key}`
}))`
width: fit-content;
// text의 색상을 props에 따라 변경되도록함.
// 유저가 선택한 값(props.$isSelect)과 props.children이 같다면 색상을 #1fa1d4로 변경
color: ${(props) => (props.$isSelect === props.children ? '#1fa1d4' : '#1d1d1d')};
`;
<MatchingComponent.jsx>
{artist.category.map((el, i) => {
return (
// 유저가 선택한 카테고리를 props로 전달
// userDataArr[0] = '협재' 이고, {el} = '협재'라면 색상 변경
<Category $key={i} $isSelect={userDataArr[0]}>
{el}
</Category>
);
})}
이전의 나는 생각해보지 않은 낯선 문제를 만날 때마다
시작을 어떻게 해야할지, 설계를 어떻게 해야할지,
코드를 어떻게 효율적으로 작성할지 고민하는 시간이 길었고
그 과정에서 이상하게 긴장을 하게 됐는데
지금은 그런 긴장이 조금 줄은 거 같아서 기쁘다.
시작을 어떻게 해야할지, 지금 필요한 것이 무엇이고,
해야 할 것이 무엇인가 인지하는 것에 서툰 부분이 줄었다.