카테고리 없음

실전 프로젝트

jann2 2021. 12. 30. 04:00

오늘의 기능구현

1.메인페이지 데이터 받아와서 뿌려주기

2.검색페이지 api연결하기

 

 

3. 구현중- 모달에서 태그를 1-3개 선택해서 해당 태그에 대한 내용만 보여주기

 

 

//새 배열로 만들기
  const [tag_list, setTagList] = React.useState([]); //태그리스트 클릭 시 바뀐 상태값 업데이트
  console.log("taglist", tag_list);

  //한번만 렌더링해서 배열 변경 해줘야함 => useEffect사용
  //{tag:"젠틀함"}=>{tag:젠틀함, active:false}
  useEffect(() => {
    const newList = tagList.map((list, idx) => { //map()=>새로운 배열을 리턴(배열패턴에 주의하자)//
      const obj = {
        tag: list.tag,
        active: false, 
      };
      return obj;
    });
    console.log("list", newList);

    setTagList(newList); //tag_list를 새로운 배열로 만들어준다.(active:false를 포함한 배열)
  }, []);

  
  //누른 tag의 active를 현재 상태의 반대로 만들어줘야함.(토글기능->true면 false, false면 true)
  const handleClickTag = (idx) => { //온클릭 하면 실행되는 함수
    const newList = tag_list.map((l, i) => {
      if (idx === i) { //tag_list의 active값을 변경해줘야 하니까 현재 클릭한 버튼의 인덱스와 tag_list의 인덱스를 비교하기 위해 맵을 사용.
        return {
          tag: l.tag,
          active: !l.active, //active : active ? false : true 로 써도 된다.
        };
      }
    });
    setTagList(newList);
  };

  return (
    <>
      <BackGround>
        <Wrap>
          <Modal>
            <TagDiv>
              {tag_list.map((l, idx) => {
                //props는 값이 바뀌지 않기 때문에 tag_list를 map
                return (
                  <div key={idx} style={{ display: "inline-block" }}>
                    {/* onClick={함수()}라고 써주면 함수가 클릭 전에 바로 실행. 인자값을 넣어주고 싶으면 onClick={()=>{함수()}} 이렇게 써야한다.*/}
                    <TagBtn onClick={() => handleClickTag(idx)}>{l.tag}</TagBtn>
                  </div>
                );
              })}
            </TagDiv>
          </Modal>