
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>
);
})}
이전의 나는 생각해보지 않은 낯선 문제를 만날 때마다
시작을 어떻게 해야할지, 설계를 어떻게 해야할지,
코드를 어떻게 효율적으로 작성할지 고민하는 시간이 길었고
그 과정에서 이상하게 긴장을 하게 됐는데
지금은 그런 긴장이 조금 줄은 거 같아서 기쁘다.
시작을 어떻게 해야할지, 지금 필요한 것이 무엇이고,
해야 할 것이 무엇인가 인지하는 것에 서툰 부분이 줄었다.